Linux 终端历史能够方便我们查看历史执行命令,也可以帮助重新执行历史中执行的命令。下面介绍常用的操作历史的方法。

历史命令时间戳

一般情况下,我们直接在终端中输入命令 history 就可以查看历史命令,以序号展示:

1
history
1
2
3
4
1  history
2 ls
3 who
4 history

可以通过如下设置,将历史命令的时间打印出来:

1
2
export HISTTIMEFORMAT='%F %T '
history
1
2
3
4
5
1  2022-12-16 05:22:25 history
2 2022-12-16 05:22:26 ls
3 2022-12-16 05:22:27 w
4 2022-12-16 05:22:43 export HISTTIMEFORMAT='%F %T '
5 2022-12-16 05:22:46 history

清空历史记录

清空历史记录方法如下:

1
history -c

清空某条历史记录

清空某一条历史记录,需要知道该历史记录的序号,如序号1,然后使用下面命令清除:

1
history -d 1

搜索历史记录

一般使用方向键:上,下,即可向上或向下搜索上一条或下一条历史记录。但有时候,我们需要根据历史记录中包含有某些字符的历史记录,可以使用快捷键:ctrl + r,效果如下:

1
(reverse-i-search)`HIS': export HISTTIMEFORMAT='%F %T '

然后,可以回车执行。或向左方向键再次编辑,向上找到该条历史记录上一条,向下找到该条历史记录下一条。

或者通过如下方法也可以找到包含某些字符的历史命令:

1
history | grep HIS

执行上一条命令

执行上一条命令,可以直接通过向上快捷键找到上一条命令,然后回车即可执行。
或者输入如下命令,回车也可以执行上一条命令

1
$$

获取上一条命令的最后一个参数

1
ls /home/jinzhongxu/playground
1
ls -l !$

就是执行

1
ls -l /home/jinzhongxu/playground

获取上一条命令的第一个参数

1
cp inputrc inputrc.bak
1
vim !^

就是执行

1
vim inputrc

执行以某些字符开头的命令

1
ps -ef
1
!ps

获取某个历史命令的某个参数

1
cp inputrc inputrc.bak

获取第一个参数

1
ls -l !cp:1

就是执行

1
ls -l inputrc

获取第二个参数

1
ls -l !cp:2

执行某个历史命令

如想执行需要为 3 的历史命令

1
!3

不记录某些命令

默认清空下,shell 中执行的所有命令都会记录在 history 中,如果不想把执行的命令记录进去,可以如下设置

1
export HISTCONTROL=ignorespace

然后,在执行命令时,在命令最前面增加一个空格:

1
ls

注意,与不增加空格的命令对比:

1
ls

不记录所有历史命令

1
export HISTSIZE=0

排查某些命令,不记录到历史命令中

如果一些常规命名不想记录到历史中,可以如下设置:

1
export HISTIGNORE="pwd:ls:ls -lSr:"

剔除历史命令中的重复项

有时候,一个命令在不同时刻执行,会在历史命令中记录多次,如 pwdls 等。我们可以使用如下设置,剔除这些重复项:

1
export HISTCONTROL=erasedups

显示时剔除重复项

有时候我们不想直接在历史命令中剔除这些重复项,我们只希望显示时重复项只出现一次,方法如下:

1
export HISTCONTROL=ignoredups

参考文献

  1. 掌握 Linux 命令行历史的 15 个示例