技巧与 / - 闪电速技——近在咫尺的命令

作者:Kyle Rankin

我大约每年都会写一篇题为“闪电速技”的专栏。这个专栏的灵感来自于您在大多数会议上遇到的闪电演讲。在闪电演讲中,不是由一位演讲者进行 60 分钟的演讲,而是由多位演讲者进行 5-10 分钟的简短演讲。在闪电演讲结束时,您最终会听到各种很酷的主题,而这些主题原本不会有自己的时间段。在本专栏中,我将有机会谈论一些我偶然发现的非常酷的“技巧”,这些“技巧”本身不足以写满整个专栏。

在过去的“闪电速技”专栏中,我涵盖了各种不同的主题,在之前的版本中,我专注于使用 ssh 命令的技巧。然而,在本专栏中,我将展示一些关于您可能每天都会使用的命令的有趣技巧。人们很容易认为自己最喜欢的程序是理所当然的,但我发现,无论我使用 Linux 多久,似乎总能学到新的省时技巧,“闪电速技”专栏是列出我最喜欢的一些技巧的好地方。

新的退出方式

对于本专栏的常客来说,我使用 vim 编辑所有文本文件已经不是新闻了。我使用 vim 已经很久了,我对 Esc 键的肌肉记忆已经成为第二天性。当您在 vim 中按下 Esc 键时,您可以从您所处的任何模式返回到默认的导航模式。当我完全不确定自己身在何处或处于何种模式时,我的大脑会自动让我的手像《河马吃豆》冠军玩家一样敲击 Esc 键。当然,在现代键盘上,Esc 键离主行很远,更糟糕的是,在某些键盘(如 ThinkPad)上,Esc 键的位置不同,因此像我这样的人一半时间会敲击 F1 键。然而,事实证明,Ctrl-[ 的功能与 vim(以及其他接受 vi 风格语法的程序,如 vimperator)中的 Esc 完全相同。这两个键都只需小指一够就能够到,并且让您的大部分手指都保持在主行上。不过我不得不说,旧习惯很难改掉。我不得不在我的显示器上贴一张便利贴,上面写着“Ctrl- [”,几个星期后我的手指才开始接受这个提示。不过,习惯的养成只需要几个星期的时间,在您意识到之前,您就可以节省额外的毫秒打字时间。

既然我已经从可怜的 Esc 键上移除了另一个功能,那么让我们给它一些其他的事情做。当我第一次使用终端会话设置我的 N900 时,我遇到了许多便携式计算机用户面临的问题:一半的特殊键不在小键盘上。就我而言,这带来了一个相当大的问题,因为我是 Irssi 的重度用户,而我的键盘甚至在特殊符号菜单中也无法按下 Alt 键。如果没有 Alt 键,在不同的 Irssi 窗口之间切换非常痛苦。我不知道该怎么办,直到我发现,在大多数终端会话中,Esc 键可以代替 Alt 键。事实证明,我的终端模拟器有一个 Esc 触摸屏按键映射,因此从那时起,我只要需要 Alt 键,就会按下 Esc 键。事实证明,这在我的所有笔记本电脑终端会话中都以相同的方式工作。

打开 Vim 并定位到指定行号

这是一个快速而简单的技巧,我真不敢相信我花了这么长时间才发现它。通常,您会遇到想要打开文件并定位到特定行号的情况。一些很好的例子包括当您重新启动服务器时,ssh 进入服务器并意识到主机密钥已更改。错误消息列出了具有冲突密钥的行号,因此很容易进入并擦除它。另一个常见的例子是当您处理脚本或配置文件时,看到对特定行上的语法错误的引用。

在过去,当我想在 vim 中转到特定行时,我会打开文件并按下 :<number><Enter> 以转到该行,但是如果您想节省一步,只需在执行 vim 时将 +<number> 作为参数添加到命令行即可。例如,如果我想跳转到我的 ~/.ssh/known_hosts 文件中的第 27 行,我会输入

vim ~/.ssh/known_hosts +27
使用 Grep 过滤 Grep

如果您想在命令行上花费任何时间,Grep 是您应该掌握的关键工具之一。我使用 grep 最常见的方式之一是检查某个进程是否正在运行并查看其进程 ID。例如,如果我想检查我的 cron 守护进程的进程 ID,我可能会输入

$ ps -ef | grep cron
root      1215     1  0 Feb23 ?        00:00:00 cron
greenfly  1252  1976  0 20:57 pts/0    00:00:00 grep cron

在这个例子中,cron 的进程 ID 是 1215。然而,令人讨厌的是,因为我的 grep 命令中包含 cron,所以它也出现在输出中。这意味着每次我运行此命令时,我都必须确保忽略输出中的该行。当然,我也可以使用 grep 来过滤自身

$ ps -ef | grep cron | grep -v grep
root      1215     1  0 Feb23 ?        00:00:00 cron

这行得通;但是,这是不必要的。如果我将第一个 grep 过滤器中的一个字符放在方括号中,它就会为我进行过滤

$ ps -ef | grep [c]ron
root      1215     1  0 Feb23 ?        00:00:00 cron

这之所以有效,是因为当我在方括号中包含 c 时,它会将其变成一个只包含一个字符 c 的字符类。然而,grep 命令本身会以这些方括号出现在进程列表中,因此它不再匹配我的 [c]ron 模式。

听见你的 Ping

强大的服务器硬件的问题在于,它总是需要一点时间才能重启。通常,当我必须重启服务器时,我想知道它何时恢复正常运行,因为我想重新登录并完成一些工作。通常,当我重启一台机器时,我会启动一个 ping 进程,这样我就可以观察到它何时可用。问题是,服务器似乎需要足够长的时间才能恢复正常运行,以至于我最终会在桌面上的另一个窗口中分心,而看不到 ping 回复。我的解决方案是让 ping 可听见

$ ping -a 10.0.1.7

当您传递-a命令给 ping 时,它会为每个 ping 回复生成一个声音提示。当服务器关闭时,我会听到一些系统提示音,然后我只会听到沉默。如果我真的分心了,而服务器又恢复了,我会立即开始听到耳朵里传来烦人的系统提示音,并且知道服务器已准备就绪。

Kyle Rankin 是旧金山湾区的系统架构师,也是许多书籍的作者,包括The Official Ubuntu Server Book(Ubuntu 服务器官方指南)Knoppix Hacks(Knoppix 技巧)Ubuntu Hacks(Ubuntu 技巧)。他目前是北湾 Linux 用户组的主席。

加载 Disqus 评论