良许Linux教程网 Linux命令大全 善用Bash history 命令

善用Bash history 命令

相信大家平时都有用 history 命令来查看命令历史记录,但是实际上 history命令并非只有这个功能,history 还有很多有用的功能。尤其是 Bash 版本的 history 命令,它所提供的功能比所有其他的 Linux Shell history 命令所提供的都要多。
Linux命令
Bash 的历史悠久,是一个古老的 Shell ,并且它还有一个更古老的前身 the Bourne Shell (sh) 。因此,Bash 的 history 命令是所有的 Linux Shell history 命令中功能最丰富的。Bash 版本的 history 命令不仅支持反向搜索、快速调用,还支持重写历史记录等等功能。

善用 Bash history 命令以上的这些功能都可以提高你的工作效率,因此,让良许为你一一讲解 Bash history 命令以及它常用的功能:

history 是内置的命令

history 命令与许多其他的命令不同。你可能习惯于命令都作为可执行文件放置在常见的系统级的位置,例如 /usr/bin/usr/local/bin〜/ bin。但是,内置的 history 命令并不在你的环境变量 PATH 保存的路径中的。

实际上,history 命令并没有保存在物理位置中:

which historywhich: no history in [PATH]

history 其实是 Shell 本身的一个内置函数:

type historyhistory is a shell builtinhelp historyhistory: history [-c] [-d offset] [n] orhistory -anrw [filename] orhistory -ps arg [arg...]Display or manipulate the history list.[...]

由于 history 是 Shell 的内置函数,所以每种 Shell 的 history 函数都是独一无二的。因此,你在 Bash 中能使用的功能可能无法在 Tcsh,Fish 或 Dash 中使用,同样的,在 Tcsh,Fish 或 Dash 中能使用的功能也可能无法在 Bash 中使用。

查看你的 Bash 命令历史记录

history 命令最基本,最频繁的用法就是查看你的 Shell 会话的命令历史记录:

echo "hello"hello$ echo "world"world$ history  1  echo "hello"  2  echo "world"  3  history

事件提示符

事件提示符 (!) 是按事件搜索历史记录的。这里的事件,指的是每一条记录在历史记录里的命令。换句话说,它就是一行命令,并被数字索引标记着以供引用。

要重新运行历史记录中的一个命令,用 ! 直接加上 (无空格) 你想要运行的命令前面的索引数字即可。例如,假设历史记录中的第一条指令是 echo hello ,然后你想重新运行它:

$ !1echo "hello"hello

你还可以通过从历史记录中的当前位置开始提供负数的行来使用相对定位。例如,返回历史记录中倒数第3条命令:

echo "alvin"alvin$ echo "hello"hello$ echo "world"world$ !-3echo "alvin"alvin

如果你只想返回上一条命令,你可以使用简写 !! 来替代 !-1。这整整节省了一次按键的时间!!!

echo "alvin"alvin$ !!echo "alvin"alvin

字符串搜索

你也可以通过特定的字符串来搜索历史记录中的命令并运行它。

若是想要搜索以特定字符串开头的命令,就用 ! 直接加上 (无空格) 你想要搜索的字符串:

echo "alvin"alvin$ truefalse$ !echoecho "alvin"alvin

你还可以搜索在任意位置包含特定字符串的命令。要做到这点,你只需要用 ! 直接加上前后两端都被 ? 包围的特定字符串即可,像这样:

echo "alvin"alvin$ truefalse$ !?alvin?echo "alvin"alvin

如果你知道你想要搜索的字符串在命令的最后面,那就可以省略字符串后面的 ?,像这样:

echo alvinalvin$ !?alvinecho alvinalvin

值得注意的是,若是历史记录中包含目标字符串的命令不止一条,则它只会执行符合条件的命令中最后的一条:

echo "hello world"hello world$ echo "hello alvin"hello alvin$ !?hello?echo "hello alvin"hello alvin

字符串替换

你可以搜索一个特定的字符串并用新字符串替换它,从而更改命令:

echo "hello"hello$ echo "world"world$ ^hello^alvinecho "alvin"alvin

但是它只能替换第一次出现的目标字符串,若是命令中出现两次目标字符串,则只有第一次出现的会被替换,像这样:

echo "hello hello"hello hello$ ^hello^alvinecho "alvin hello"alvin hello

与字符串搜索一样,当历史记录中包含目标字符串的命令不止一条时,只替换并执行最后一条:

echo "hello world"hello world$ echo "hello"hello$ ^hello^alvinecho "alvin"alvin

充分利用 history 命令

实际上,Bash 的 history 命令的功能远不止本文所提到的,但这是你习惯使用history 命令的一个很好的开始,而不仅仅是利用 history 来查看历史记录。要经常使用 history 命令,看看你只利用 history 命令而不输入具体的指令能完成多少事情,你会被惊艳到的。

以上就是良许教程网为各位朋友分享的如何善用Bash history 命令。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你!
公众号

本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部