随着我在终端会话中花费越来越多的时间,感觉就像我一直在寻找使我的日常任务更加高效的新命令一样。 GNU history
命令确实改变了我的工作日。
GNU history
命令保留了从该终端会话运行的所有其他命令的列表,然后允许您重播或重用这些命令,而不必重新键入它们。 如果您是经验丰富的终端用户,您将了解history
的力量,但是对于我们涉水者或新的sysadmin人士而言, history
可立即提高生产力。
首先, history
命令实际上不是命令。 您可以通过在系统上查找命令来亲自查看:
$
which
history
which: no
history
in
(
/ usr
/ local
/ bin:
/ usr
/ bin:
/ bin:
/ usr
/ games:
/ usr
/ local
/ sbin
)
您的计算机找不到history
命令,因为它是Shell的内置关键字。 由于已将其写入您正在使用的shell中,因此历史记录的行为方式可能会有所不同,具体取决于您是否使用Bash ,tcsh, Zsh ,dash, fish ,ksh等。 本文基于历史记录的Bash实现,因此某些功能可能无法在其他Shell中使用。 但是,大多数基本功能是相同的。
历史101
要查看运行中的history
,请在Linux安装上打开一个终端程序,然后键入:
$ history
这是我得到的答复:
1
clear
2
ls
-al
3
sudo dnf update
-y
4
history
history
命令显示了自启动会话以来输入的命令列表。 history
的喜悦在于,现在您可以使用以下命令来重播其中的任何一个:
$ !3
提示符处的!3
命令告诉外壳程序在历史记录列表的第3行重新运行该命令。 我还可以通过输入以下命令来访问该命令:
$ ! sudo dnf
这会提示history
以搜索与您提供的模式匹配的最后一个命令(在本例中,该模式为dnf )并运行它。
搜索历史
您还可以使用history
通过键入!!
来重新运行最后输入的命令!!
。 通过将其与grep
配对,可以搜索与文本模式匹配的命令,或者将其与tail
一起使用,可以找到执行的最后几个命令。 例如:
$
history
|
grep dnf
3
sudo dnf update
-y
5
history
|
grep dnf
$
history
|
tail
-n
3
4
history
5
history
|
grep dnf
6
history
|
tail
-n
3
获得此搜索功能的另一种方法是键入Ctrl-R
来调用命令历史记录的递归搜索。 输入此内容后,提示将变为:
(reverse-i-search)`':
现在您可以开始键入命令,然后按Return或Enter将显示匹配的命令供您执行。
更改执行的命令
您还可以使用history
以不同的语法重新运行命令。 您可以使用history
修改历史history
。 例如,如果我想更改以前的命令history | grep dnf
history | grep dnf
的history | grep ssh
history | grep ssh
,我可以在提示符下执行以下操作:
$ ^dnf^ssh^
该命令将重新运行,但dnf
被ssh
取代。 换句话说,将运行以下命令:
$ history | grep ssh
删除历史
您可能有时需要删除历史记录文件中的部分或全部命令。 如果要删除特定命令,请输入history -d <line number>
。 要清除历史记录文件的全部内容,请执行history -c
。
历史记录文件存储在您也可以修改的文件中。 Bash Shell用户在其主目录中以.bash_history
找到它。
下一步
您还可以对history
进行其他操作:
- 将历史记录缓冲区的大小设置为一定数量的命令
- 记录历史中每一行的日期和时间
- 防止某些命令记录在历史记录中
有关history
命令以及您可以使用它进行的其他有趣操作的更多信息,请查看Seth Kenlon的有关分析历史的文章, 历史搜索修饰符和GNU Bash手册 。
本文最初于2018年6月发布,并已由编辑者进行了附加信息更新。