最近,我让一些人观看我共享的屏幕,他们不停地说“哦,这太酷了,我不知道你可以在 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技巧是什么?请在下方评论区分享!