linux系统的shell自带历史命令记录功能,默认会自动保存用户执行过的命令,方便后续查看、复用和排查操作问题,该功能由bash等常见shell内置的history工具提供支持。

查看历史命令
最基础的用法是直接执行history命令,该命令会列出当前用户保存的所有历史命令,每条命令前会带有一个编号,方便后续通过编号调用命令。
# 查看所有历史命令 history # 查看最近10条历史命令 history 10
执行历史命令
可以通过多种方式快速执行之前记录过的命令,不需要重新完整输入:
- 使用
!加命令编号,执行对应编号的历史命令 - 使用
!!执行上一条执行过的命令 - 使用
!字符串执行最近一条以该字符串开头的命令
# 执行编号为5的历史命令 !5 # 执行上一条命令 !! # 执行最近一条以ls开头的命令 !ls
搜索历史命令
当历史命令数量较多时,可以通过快捷键或者命令快速搜索需要的记录:
- 按下
Ctrl + r进入反向搜索模式,输入关键词会匹配最近的相关命令,再次按下Ctrl + r可以切换到更早的匹配项,找到后按回车直接执行,按Ctrl + c退出搜索 - 执行
history | grep 关键词可以过滤出包含指定关键词的所有历史命令
# 搜索包含nginx的历史命令 history | grep nginx
清除历史命令
如果需要清除已有的历史记录,可以使用以下命令:
# 清除当前会话的所有历史命令记录 history -c # 删除指定编号的历史命令,比如删除编号为3的命令 history -d 3
历史命令配置调整
历史命令的保存规则可以通过环境变量调整,常见的配置项如下:
| 环境变量 | 作用说明 |
|---|---|
| HISTSIZE | 设置当前shell会话中内存里保存的历史命令最大数量 |
| HISTFILESIZE | 设置历史命令保存文件(默认是~/.bash_history)中保存的命令最大数量 |
| HISTTIMEFORMAT | 设置历史命令显示的时间格式,比如设置为"%Y-%m-%d %H:%M:%S "可以显示命令执行时间 |
| HISTCONTROL | 控制历史命令的保存规则,设置为ignorespace可以忽略以空格开头的命令,设置为ignoredups可以忽略重复的连续命令 |
如果需要永久生效,可以将配置写入~/.bashrc文件中,比如添加以下内容让历史命令显示执行时间,并且忽略以空格开头的命令:
# 设置历史命令显示时间格式 export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " # 忽略以空格开头的命令 export HISTCONTROL=ignorespace # 让配置生效 source ~/.bashrc
注意事项
需要注意历史命令默认会在当前shell会话退出时才会写入保存文件,如果需要在执行命令后立即保存,可以执行history -a命令手动将当前会话的历史命令写入文件。另外如果多个终端同时登录同一个用户,历史命令可能会出现覆盖的情况,可以通过调整配置避免这个问题。