大家好,我是良许
置信大家平时都有用 history
命令来查看命令历史记录,然而实际上 history
命令并非只有这个性能,history
还有很多有用的性能。尤其是 Bash 版本的 history
命令,它所提供的性能比所有其余的 Linux Shell history
命令所提供的都要多。
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 history
which: no history in [PATH]
history
其实是 Shell 自身的一个内置函数:
$ type history
history is a shell builtin
$ help history
history: history [-c] [-d offset] [n] or
history -anrw [filename] or
history -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
,而后你想从新运行它:
$ !1
echo "hello"
hello
你还能够通过从历史记录中的以后地位开始提供正数的行来应用绝对定位。例如,返回历史记录中倒数第 3 条命令:
$ echo "alvin"
alvin
$ echo "hello"
hello
$ echo "world"
world
$ !-3
echo "alvin"
alvin
如果你只想返回上一条命令,你能够应用简写 !! 来代替 !-1。这整整节俭了一次按键的工夫!!!
$ echo "alvin"
alvin
$ !!
echo "alvin"
alvin
字符串搜寻
你也能够通过特定的字符串来搜寻历史记录中的命令并运行它。
若是想要搜寻以特定字符串结尾的命令,就用 ! 间接加上 (无空格) 你想要搜寻的字符串:
$ echo "alvin"
alvin
$ true
$ false
$ !echo
echo "alvin"
alvin
你还能够搜寻在任意地位蕴含特定字符串的命令。要做到这点,你只须要用 ! 间接加上前后两端都被 ? 突围的特定字符串即可,像这样:
$ echo "alvin"
alvin
$ true
$ false
$ !?alvin?
echo "alvin"
alvin
如果你晓得你想要搜寻的字符串在命令的最初面,那就能够省略字符串前面的?,像这样:
$ echo alvin
alvin
$ !?alvin
echo alvin
alvin
值得注意的是,若是历史记录中蕴含指标字符串的命令不止一条,则它只会执行符合条件的命令中最初的一条:
$ echo "hello world"
hello world
$ echo "hello alvin"
hello alvin
$ !?hello?
echo "hello alvin"
hello alvin
字符串替换
你能够搜寻一个特定的字符串并用新字符串替换它,从而更改命令:
$ echo "hello"
hello
$ echo "world"
world
$ ^hello^alvin
echo "alvin"
alvin
然而它只能替换第一次呈现的指标字符串,若是命令中呈现两次指标字符串,则只有第一次呈现的会被替换,像这样:
$ echo "hello hello"
hello hello
$ ^hello^alvin
echo "alvin hello"
alvin hello
与字符串搜寻一样,当历史记录中蕴含指标字符串的命令不止一条时,只替换并执行最初一条:
$ echo "hello world"
hello world
$ echo "hello"
hello
$ ^hello^alvin
echo "alvin"
alvin
充分利用 history 命令
实际上,Bash 的 history
命令的性能远不止本文所提到的,但这是你习惯应用 history
命令的一个很好的开始,而不仅仅是利用 history
来查看历史记录。要常常应用 history
命令,看看你只利用 history
命令而不输出具体的指令能实现多少事件,你会被惊艳到的。
最初,心愿本文对你的工作有所帮忙,如果你对 history
命令还有疑难,或者你还晓得 history
命令一些更有用的性能,请留言通知我呗!
最初,最近很多小伙伴找我要 Linux 学习路线图 ,于是我依据本人的教训,利用业余时间熬夜肝了一个月,整顿了一份电子书。无论你是面试还是自我晋升,置信都会对你有帮忙!
收费送给大家,只求大家金指给我点个赞!
电子书 | Linux 开发学习路线图
也心愿有小伙伴能退出我,把这份电子书做得更完满!
有播种?心愿老铁们来个三连击,给更多的人看到这篇文章
举荐浏览:
- 干货 | 程序员进阶架构师必备资源免费送
- 神器 | 反对搜寻的资源网站