history - 查看与管理 Shell 历史

history命令用于显示用户以前执行过的历史命令,并且能对历史命令进行追加和删除等操作。

常用参数:

参数描述
-a将当前shell会话的历史命令追加到命令历史文件中,命令历史文件是保存历史命令的配置文件
-c清空当前历史命令列表
-d删除历史命令列表中指定序号的命令
-n从命令历史文件中读取本次Shell会话开始时没有读取的历史命令
-r读取命令历史文件到当前的Shell历史命令内存缓冲区
-s将指定的命令作为单独的条目加入命令历史内存缓冲区。在执行添加之前先删除命令历史内存缓冲区中最后一条命令
-w把当前的shell历史命令内存缓冲区的内容写入命令历史文件

参考实例 显示最近的命令:

history 10
history | more
history | less
history | head
history | tail

将本次登录的命令写入历史文件中:

history -w

将命令历史文件中的内容读入到目前shell的history记忆中 :

history -r

将当前Shell会话的历史命令追加到命令历史文件中:

history -a

清空当前历史命令列表:

history -c

重复上一个命令:

!!

使用它的编号重复执行先前的命令:

!123

运行匹配给定字符串的命令:

docker ps
docker images
!? ps	# 这时用!docker则会执行docker images这一条,而使用!? ps, 则可以匹配到docker ps这一条历史命令

替换字符串并运行先前执行的命令:

!!:s|string1|string2|	# 用string2替换上一条命令中的string1
^string1^string2	# 作用同上
 
!827:s|string1|string2|	# 用string2替换第827条命令中的string1

不记录操作记录

[space]set +o history

备注:[space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录。 如果在命令前加空格仍会记录到history中,则需要修改bashrc的内容

echo HISTCONTROL=ignorespace >> ~/.bashrc
source ~/.bashrc

上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的所有东西都会原样记录在历史列表中。

要重新开启历史功能,执行下面的命令:

[Space]set -o history

它将环境恢复原状,也就是你完成了你的工作,执行上述命令之后的命令都会出现在历史中。

清除linux操作记录

set +o history # 开启不记录操作信息
history # 查看set +o history命令的编号
history -d $NUMBER # 删除set +o history命令的记录
 
# 清除下面三个记录之后无法通过安全日志、last命令以及重新登录后的last login来查看上一次登录信息
echo > /var/log/secure
echo > /var/log/wtmp
echo > /var/log/lastlog