大家好,相信大家平时都是使用history命令来查看命令历史,但其实history命令并不是唯一的功能,history还有很多有用的功能。特别是历史命令的Bash版本,它提供了比所有其他Linuxshell历史命令更多的功能。Bash历史悠久,是一个古老的shell,它还有一个更古老的前身,即BourneShell(sh)。因此,Bash的历史命令是所有LinuxShell历史命令中功能最丰富的。bash版的history命令不仅支持反向搜索、快速调用,还支持重写历史等等。善用bashhistory命令的上述功能,可以提高你的工作效率,让良旭为你一一讲解bashhistory命令及其常用功能:history是一个内置命令。history命令不同于许多其他命令。您可能习惯于将命令作为可执行文件放置在常见的系统级位置,例如/usr/bin、/usr/local/bin或~/bin。但是内置的history命令并不在你的环境变量PATH中保存的路径中。实际上,history命令并没有存储在物理位置:$whichhistorywhich:nohistoryin[PATH]history实际上是shell本身的内置函数:$typehistoryhistory是shellbuiltin$helphistoryhistory:history[-c][-doffset][n]orhistory-anrw[filename]orhistory-psarg[arg...]显示或操作历史列表。[...]由于history是shell的内置函数,因此每个shell的history函数都是唯一的。因此,在Bash中有效的方法在Tcsh、Fish或Dash中可能无效,同样,在Tcsh、Fish或Dash中有效的方法在Bash中可能无效。查看Bash命令历史记录最基本和最常用的命令是查看shell会话的命令历史记录:$echo"hello"hello$echo"world"world$history1echo"hello"2echo"world"3history事件提示事件提示符(!)用于按事件搜索历史记录。这里的事件指的是历史上记录的每一个命令。换句话说,它是一个命令行,标有数字索引以供参考。要重新运行历史记录中的命令,请使用!后跟(无空格)要运行的命令之前的索引号。例如,假设历史中的第一条指令是echohello,你想重新运行它:$!1echo"hello"hello你也可以通过提供从当前位置开始的带有负数的行来使用相对定位在历史上。例如,要返回历史记录中的倒数第3个命令:$echo"alvin"alvin$echo"hello"hello$echo"world"world$!-3echo"alvin"alvin如果你只想返回上一个命令,你可以使用速记!替换!-1。这节省了整个击键时间!!!$echo"alvin"alvin$!!echo"alvin"alvinstringsearch您还可以通过特定字符串在历史记录中搜索命令并运行它。如果要搜索以特定字符串开头的命令,请使用!直接添加(不带空格)要搜索的字符串:$echo"alvin"alvin$true$false$!echoecho"alvin"alvin您还可以在任何地方搜索包含特定字符串的命令。为此,您只需要使用!直接添加由?包围的特定字符串在两端,像这样:串在它后面?,像这样:$echoalvinalvin$!?alvinechoalvinalvin值得注意的是,如果历史记录中有多个命令包含目标字符串,它只会执行最后一个符合条件的命令:$echo"helloworld"helloworld$echo"helloalvin"helloalvin$!?hello?echo"helloalvin"helloalvin字符串替换您可以搜索特定字符串并将其替换为新字符串,从而更改命令:$echo"hello"hello$echo"world"world$^hello^alvinecho"alvin"alvin但是它只能替换第一次出现的目标字符串,如果目标字符串在命令中出现两次,只会替换第一次出现的,像这样:$echo"hellohello"hellohello$^hello^alvinecho"alvinhello"alvinhello同字符串搜索,当历史中有多个命令包含目标字符串时,只替换最后一条命令执行:$echo"helloworld"helloworld$echo"hello"hello$^hello^alvinecho"alvin"alvin充分利用了history命令其实Bash的history命令的功能远不止本文提到的,但这就是你习惯于使用history一个好的开始是使用命令而不是仅仅使用history来查看历史记录。经常使用history命令,您会惊讶于仅使用history命令而无需键入特定命令就可以完成如此??多的工作。最后,希望本文对您的工作有所帮助。如果你对history命令还有疑问,或者你知道history命令的一些更有用的功能,欢迎留言告诉我!最后,最近有很多朋友找我要一份Linux学习路线图,所以我结合自己的经验,利用业余时间熬夜一个月,整理了一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以和我一起把这本电子书做得更完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站
