Linux下的history命令其实很强大

Linux下的history命令其实很强大

在使用Linux系统的过程中是不是有时候明明记得之前执行过一条相同的命令,但怎么都想不起来是哪个命令,用向上键都翻了一遍也没找到。

这时history命令就可以大显身手了,下面给大家详细讲解一下命令参数:


history命令的用途

history命令用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。

如果你是一个老司机肯定知道history有多强大,但是对于新手来说或许只知道它可以显示历史命令。


查看与执行历史命令

要查看命令历史,请在 Linux 中打开终端程序,然后输入:

$ history

会看到:

1 clear
2 ls -al
3 sudo dnf update -y
4 history


$ history 10

会看到:

1 ls
2 cd ..
3 ls
4 exit
5. ls -a
6. cat hosts
7. exit
8. cd /etc/
9. exit
10. history 10

history 命令显示自开始会话后输入的命令列表。

但是真正强大的地方是你可以使用以下命令重新执行任意一个命令:

$ !3 \\重新运行历史列表中第 3 个命令,也就是我们上面看到的ls -al

提示符中的 !3告诉 shell 重新运行历史列表中第 3 个命令,也就是我们上面看到的ls -al,还可以输入以下命令来执行历史命令:

!sudo dnf //history 将搜索与你输入相匹配的最近一个命令,并重新执行它

!! //重新执行历史命令中的最后一条命令


按条件搜索历史命令
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)`':

现在可以输入一个命令,并且会显示匹配的命令,按回车键执行。

更改已执行的命令

history 还允许使用不同的语法重新运行命令

例如,改变以前的命令 history | grep dnf 成 history | grep ssh,可以执行以下命令:

$^dnf^ssh^

history 会将dnf替换为ssh,并重新执行

清除历史

有时想要删除一些或全部的历史记录

  • 如果想要删除特定命令,请输入 :history -d <行号>
  • 要清空全部历史记录,请执行:history -c

其实所有的历史命令记录都存储在每个用户的宿主目录下.bash_history文件里,并且这个文件还可以编辑。


扩展知识:

history除了以上的功能还可以做一些个性化的设置:

  • 将历史缓冲区设置为只记录一定数量的历史命令
  • 记录历史中每行的日期和时间
  • 防止某些命令被记录在历史记录中

这些个性化设置有兴趣的话可以自己研究一下,相信会对你理解和使用这个命令有帮助。


  • 微信公众号ID:snmp161

编辑于 2018-07-02 12:34

文章被以下专栏收录