这是Linux CLI基础知识系列的另一部分。这次,我们将处理其他interest-worthy个任务,例如设置键盘布局或使用实用程序在驱动器上查找文件。我们希望该系列可以帮助您成为键盘/终端大师。
任务,第三部分
设置键盘布局
当您使用一些精美的桌面环境时,更改键盘布局非常简单。只需单击几下,您就可以选择首选的布局以及其他本地化设置,仅此而已。但是,如果您发现自己在一台命令行-only机器上并且必须使用该机器,但布局设置为法语,该怎么办?键显示一个符号,但是您键入另一个则没有任何效果。该怎么办?或者,您决定将肿的GNOME或KDE转储给某些轻量级的窗口管理器(如Fluxbox)。此任务应使用的内容严格取决于您是否安装了X。如果这样做,该实用程序称为setxkbmap。如果您不这样做,则可以使用发行版提供的各种工具(顺便说一句,请记住,我们在示例中使用的是Ubuntu),但是我们将向您展示如何在terminal-only模式下进行操作,而无需依赖某些distro-specific工具。
所示的第一个方法将是假定您已安装X.org并将其与某些WM结合使用的方法,但是您没有用于更改布局的任何特定GUI工具。与往常一样,我建议您花一些时间查看setxkbmap手册页,以了解选项和常规用法标志。如您所暗示的,该实用程序的名称代表“ set X键盘映射”。我记得使用过仅包含需要的setxkbmap行的shell脚本,然后设置了根据需要调用所述脚本的键盘快捷键(〜/.fluxbox /keys):也许这是您在阅读本文后将要使用的技巧,以便您的工作变得容易。这就是Linux的魅力,实际上对它的功能没有任何限制。
聊够了,让我们看一些实际的例子。如果我将美国英语版式设置为默认设置(在大多数情况下会发生这种情况),并且想将其更改为法语,那么我要做的就是
$ setxkbmap -layout fr
即使您不需要法式布局,我也敢于执行此命令,然后尝试回到美国布局。顺便说一下,布局名称是’us’,但这并不是重点。现在,一个合乎逻辑的问题是“我如何知道我想使用的每个布局的名称?”非常简单。只是利用ls和你的壳,通过做
$ ls /usr/share/keymaps/YOUR_ARCH/*
经验法则是,在kmap.gz后缀之前的任何名称都是与setxkbmap一起使用的布局的名称,而忽略了我们不感兴趣的include目录。 YOUR_ARCH是您的体系结构,通常是i386,尽管该系统是64位计算机/OS组合。 setxkbmap的另一个重要标志是-variant,因为许多布局具有不同的变体,其中”different”是关键字。一种语言并不意味着一种布局,一种布局绝不意味着一种变体。语言与布局的关系是一种社会/歇斯底里/政治的关系(随着法语的发展,法国曾经拥有许多殖民地,这些殖民地最终继承了该语言,并具有某些特定方面。布局->变体必须使用某些硬件。例如,Mac或Sun盒具有PC所没有的键,并且键的布局不同。)因此,如果需要非PC布局,请从上述ls命令中消除’i386’。这是设置键盘语言环境的distro-agnostic,X-centric方法。接下来是Debian /Ubuntu方式。
dpkg-reconfigure
是每个Debian管理员使用和喜爱的工具。可以使用它来配置系统的许多方面。在进一步介绍之前,请注意,您将看到的这些命令会更改键盘布局设置永久,因为它们在重新启动之间仍然存在。同样,它们的设置不是per-user,而是system-wide。开始:
# dpkg-reconfigure keyboard-configuration
许多流行的desktop-oriented发行版都具有类似的工具,例如Fedora的system-config- *工具或适用于OpenSUSE的yast *。如果您使用的是非X终端,则需要loadkeys命令,而loadkeys的参数正是具有完整路径的keymap文件,如下所述,但请记住,它不适用于X终端,例如xterm或konsole。法国的例子是
# loadkeys /usr/share/keymaps/i386/azerty/fr-latin1.map.gz
强烈建议您阅读loadkeys手册,因为即使退出后,使用该命令也可能会影响其他用户。你被警告了。另外,请记住,每个Unix系统都有其自己的特定方式来执行此类工作,因此不要期望在OpenBSD或Solaris上使用这些命令并获得预期的结果(如果有)。
查找文件
例如,KDE拥有一个通过创建文件系统内容数据库并不断更新来查找文件的系统,以便以后进行更快的搜索。这听起来不错,只不过它仅适用于KDE,而且是资源浪费。您可以从命令行进行所有索引/搜索工作,这将在所有Linux系统,所有DE甚至BSD上运行,而BSD提供了基本系统的一部分。 Solaris用户可以安装findutils。
有两种方法:数据库1和database-less。当然,每个方面都有优点:当首先创建数据库时,后续搜索会更快,但是必须确保数据库是最新的。许多Linux发行版都安装了一个脚本,该脚本每天或每周运行一次,以确保您的数据库是最新的,但是您始终可以使用特定的工具进行操作,即克朗。您可以采用另一种方法,这样就可以始终获得实际的文件系统信息,但是过程会较慢,尤其是在您拥有大型磁盘甚至是远程磁盘(例如NFS挂载)的情况下。
database-using工具称为locate,它的朋友mlocate和slocate,但是使用locate(在某些系统上可能是* locate的符号链接)就足够了。和以前一样,仅介绍基本用法,而其余部分则是手册页。因为它使用数据库,所以您不必告诉它在哪里查找或更改当前目录。只需使用
$ locate PATTERN
对于特殊字符和高级用法,请再次使用手册页。但是在进行所有查找之前,如何创建数据库?该命令为updatedb(更新数据库),这就是您要做的全部。就像我说的那样,这将需要一段时间,具体取决于速度磁盘/接口/大小,但是之后您可以使用locate进行快速搜索。
尽管它们进行专门的搜索,即PATH和/或MANPATH中的文件,但是whereis,which和apropos是属于本节的命令。这两个是非常重要的环境变量,它们告诉系统在命令行(PATH)或手册页(MANPATH)上键入所需文件的位置。例如,如果您在终端中键入’ls’,而ls所在的目录(/bin)不在PATH中,则将从 shell 程序中获取“找不到命令”。
$ whereis ls
因此,whereis和哪一个可以帮助您在PATH中查找文件,例如,当您需要了解可执行文件的位置时,这很有用,而apropos则可以帮助您搜索手册页,但是您也可以将-k用作man命令的标志。 whereis和which之间的区别是什么…您可以找到它,因此您将知道一个或另一个更适合您的需求。手册页也在数据库中建立索引,通常使用cron定期刷新。我发现自己在讲话时没有一个有效的示例,因此这是在/usr中找到与模式匹配的内容的方法:
$ find /usr -name \*pattern\* -print
星号的用法与在 shell 程序或支持通配符的其他软件上使用时一样,它们也被转义(带有反斜杠),因为我们希望它们通过find而不是shell来解释。因此语法是“查找$ location $ pattern $ options”,但是只要您知道它的功能,find可以做更多的事情。所以…嗯,你知道的,我已经重复了自己。
结论
根据您的反馈,我们可能会发布本系列的第四部分。