history 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于 Shell 内建命令族(见Shell 内建命令)。你敲过的命令它都记着,善用能省大量重复输入。
history 显示当前 shell 会话(以及持久化)里执行过的命令列表,每条带编号。shell 内建,配合 ! 系列快捷符能快速复用旧命令。
一、基本用法
bash
history # 列出全部历史(带编号)
history 20 # 只看最近 20 条
!123 # 重新执行第 123 条
!! # 重新执行上一条(常用:sudo !! 补权限)
!-1 # 上一条(同 !!)
!!是救星:apt install xxx忘了 sudo,直接sudo !!把上条命令前面加 sudo 重跑。!123按编号重跑——但注意别误执行危险命令(尤其带 rm 的)。
二、交互搜索:Ctrl-R
bash
# 按 Ctrl-R,输入关键字,反向搜索历史
# 再按 Ctrl-R 跳到更早的匹配比
history | grep更快的是Ctrl-R实时反向搜索:边打字边匹配,回车执行、右箭头编辑。日常复用长命令首选,不必先 history 再抄编号。
三、配置与持久化
bash
echo $HISTFILE # 历史文件路径(如 ~/.bash_history)
echo $HISTSIZE # 内存中保留条数
export HISTCONTROL=ignoredups:erasedups # 去重历史存于
HISTFILE(默认~/.bash_history)。HISTCONTROL=ignoredups避免重复记录相同命令,erasedups进一步全局去重。想跨终端实时共享历史,可设PROMPT_COMMAND='history -a'(每次提示符前追加)。
四、安全注意
bash
# 含有密码的命令会明文进历史文件!
export HISTIGNORE=" *:pwd:ls:* --password*" # 不匹配的命令不记录历史文件是明文的,敲了
mysql -p密码这类会原样留存,有泄露风险。用HISTIGNORE过滤敏感命令,或执行后history -d N删掉那一条。生产机尤其注意。
相关命令
一句话总结
history = 命令历史记录(shell 内建):!n 重跑第 n 条、!! 重跑上条(救 sudo !!)、Ctrl-R 实时反搜最快;HISTFILE/HISTSIZE 控制存储、HISTCONTROL=ignoredups 去重;历史明文存盘,敏感命令用 HISTIGNORE 过滤或 history -d 删掉,防泄露。