用这些简单技巧大幅提升你的 Linux Shell 性能!

最近,我让一些人观看我共享的屏幕,他们不停地说“哦,这太酷了,我不知道你可以在 shell 中这样做”。

如果你多年来每天都在使用 shell(这里指的是 bash),你可能了解其中的一些内容。但很多人只是偶尔使用 shell,或者只是略懂一些。他们不是经验丰富的 Unix 老手,而是开发人员、数据库管理员或其他以用户身份使用 shell 但从未真正阅读过相关书籍的人。

这里有一些很棒的小技巧,可以让你更愉快地使用交互式 shell。我说的不是 shell 编程(编写 shell 脚本),而是指在命令行提示符下的操作。

进入您刚刚创建的目录。

 mkdir /some/long/path/that/is/a/pain/to/type
cd $_

这比输入“cd /some/long/path…”更快。$_ 变量会获取上一个命令中的最后一项。

绕着线跳

按 Ctrl+A可将光标跳转到行首。

按 Ctrl+E可以将光标跳转到行尾。

所以如果你开始打字……

 kdir /some/long/path/that/is/a/pain/to/type

然后你发现“mkdir”命令中漏掉了“m”,可以按Ctrl+A添加,然后按回车键提交命令,或者按Ctrl+E跳回行尾继续输入。如果你已经按了回车键但出现了错误,那么向上箭头键会返回到之前的输入记录。说到这个……

历史

历史

该命令将显示您的历史记录。假设它看起来像这样:

 551  ssh 用户@服务器
552  vi /tmp/file
553  grep Prod /some/other/file

如果你想重新运行那个 vi 命令,你可以输入

1552

你也可以这样做

!vi

注意最后一种形式!使用命令编号重新运行总是会得到完全相同的命令,但类似这样的命令可能会出错!

 !r

将重新运行最后一个以 r 开头的命令。可能是“rm /some/file”。也可能是“rm -rf *”。

输入 Ctrl+R 即可搜索历史记录。

当你输入了一长串命令但不想运行它时

所以你输入了类似这样的内容:

 cp /some/long/path/to/files/*.csv /some/other/long/directory/that/is/a/pain/to/type

当你快要完成命令时,你意识到你还没有创建某个很长的目录(这个目录很麻烦,输入起来很费劲)。与其取消命令,重新创建目录并再次输入命令,不如这样做:按下 Ctrl+A,输入 # 在行首插入注释字符,然后按回车键。

现在这条长命令已经保存在你的历史记录中。你可以先创建目录,然后向上滚动找到这条命令,按下 Ctrl+A,删除 # 号,然后按 Enter 键。

条件执行

您可以使用分号分隔在一行中执行多个命令:

命令1;命令2

但如果您希望只有在命令 1 成功执行后,命令 2 才运行呢?例如:

 mkdir /tmp/blah ; cd /tmp/blah ; cp /somewhere/*.csv .

如果 mkdir 和 cd 命令失败,您不希望 cp 命令运行。请使用逻辑运算符“and”代替分号:

 mkdir /tmp/blah && cd /tmp/blah && cp /somewhere/*.csv .

一旦任何命令执行失败,该程序将停止执行。

观看命令

假设你有一个长时间运行的复制、rsync 等进程。你想监控它的运行情况。你希望每 60 秒运行一次 `du -sh`(“磁盘使用情况、摘要、易读输出”)命令。以前你会这样做:

 while [ 1 ] ; do echo ; date ; du -sh /dest/dir ; sleep 60; done

这种方法仍然可行,但更简单:

 watch -n 60 /dest/dir

你最喜欢的Linux shell技巧是什么?请在下方评论区分享!