Linux使用history命令查看命令历史记录

呼出最近执行的命令

可以通过重复按向上方向键↑遍历近来在控制台下输入的命令,按向下方向键↓可以向前遍历。找到需要的命令后,可以按Enter键执行这一命令。

history命令

$ history
 1  cat .bash_history
 2  ls -a
 3  ls
 4  man ls
 5  date
 6  history

上面的命令列出了最近执行过的命令,如果还想看到执行命令的时间,可以通过以下的命令。

$ export HISTTIMEFORMAT='%F %T '
 1  2021-12-16 14:15:55 cat .bash_history
 2  2021-12-16 14:15:56 ls -a
 3  2021-12-16 14:15:56 ls
 4  2021-12-16 14:15:57 man ls
 5  2021-12-16 14:15:58 date
 6  2021-12-16 14:16:12 history
 7  2021-12-16 14:18:15 export HISTTIMEFORMAT='%F %T '
 8  2021-12-16 14:18:20 history

命令执行历史,存储在用户主目录下的.bash_history文件中,查看该文件可以看出,它还存储了命令执行的时间。有兴趣可以通过cat .bash_history命令查看。

执行历史命令

我们可以使用方向键↑呼出历史命令,并按Enter键执行。事实上我们还可以使用!!命令和Ctrl+P组合键执行最近执行的命令。

当我们使用history命令查看历史命令的时候,还可以通过历史的编号执行命令。

如下例所示:

$ history
 1  cat .bash_history
 2  ls -a
 3  ls
 4  man ls
 5  date
 6  history
$ !5
Sun Dec 19 10:32:29 CST 2021

history列出的命令很多时,我们还可以使用管道和grep命令来过滤它。

$ history | grep date
 15  19/12/21 10:32:29 date
 16  19/12/21 10:55:16 history | grep date

也可以使用Ctrl+R来实现历史命令关键字的搜索功能,快速查找到要执行的命令并执行。按一下Ctrl+R组合键后,会出现下面的提示:

(reverse-i-search)`':

输入关键字d后,找到了匹配的命令date,可以按Enter键执行这一命令。如果匹配的命令与您想要执行的命令有一些差异,可通过左右方向键将该命令带到命令行中,进行调整后再执行。

(reverse-i-search)`d': date

清除命令历史

命令历史后透露与安全相关的许多,所以我们经常需要清除历史命令,避免被其他别有用心的人看到。这种情况下,我们就要用-c选项来帮忙了。

$ history -c

-c选项只清除内存中的记录,重新启动shell后,命令历史又重新回来了。这个时候应该使用history -w,将更改存储起来。

$ history -c
$ history -w

history-w的作用就是用内存中的历史命令覆盖.bash_histroy文件的内容,这样,即使Shell重新加载也加载不到任何命令了,因为此时.bash_history文件中已经空空如也了。

history的配置

  1. 设置历史记录的时间:
export HISTTIMEFORMAT='%F %T '    # 注意有个空格, 这样在显示时日期与命令之间会有空格分隔
  1. 控制历史命令记录的总个数:
export HISTSIZE=1000         # 设置内存中的history命令的个数
export HISTFILESIZE=1000     # 设置文件中的history命令的个数
  1. 更换历史命令的存储位置:

一般情况下,历史命令会被存储在~/.bash_history文件中。如果不想存储在这个文件中,那么可以通过下面的方式来更改:

export HISTCONTROL=erasedups    # 清除整个命令历史中的重复条目
export HISTCONTROL=ignoredups   # 忽略记录命令历史中连续重复的命令
export HISTCONTROL=ignorespace  # 忽略记录空格开始的命令,设置此项选后,不想记录到命令历史中的重要命令。
export HISTCONTROL=ignoreboth   # 等价于ignoredups和ignorespace