命令与包管理65 条

命令历史检索

复用与追溯历史命令:history 列表、Ctrl+R 反向搜索、!n 与 !! 快速重放;排障时找回上一次的复杂命令。

信创系统运维速查系统更新于 2026-10-13

history 是做什么的

history 是 bash 等 shell 内置的命令行历史功能,把当前会话执行过的命令按编号记在内存里,退出时写入 ~/.bash_history。除了翻看列表,它还能配合 Ctrl+R 反向搜索、用 !编号 与 !! 重放命令,是排查问题时找回上一条复杂命令最快的方式。注意它只是操作便利工具,不承担审计职责。

基本信息

适用平台bash(麒麟、UOS、openEuler 默认 shell)
列出history 或 history 20
检索history | grep 关键字,交互时用 Ctrl+R
重放!编号、!!、!前缀、!?包含串
环境变量HISTSIZE、HISTFILESIZE、HISTTIMEFORMAT、HISTCONTROL
存储位置会话内存在内存,退出时写入 ~/.bash_history

典型使用场景

  • 排障时找回半小时前执行过的一长串参数命令,避免凭记忆重敲出错
  • 把常用命令序列固化:翻出历史后整理成脚本或加入笔记
  • 临时给上一条命令补 sudo:直接用 sudo !! 而不是重新输入整行
  • 按关键字回查谁在什么时候执行过什么操作,作为初步线索(正式审计仍看 auditd)
  • 整理交付文档时从历史里回收实际使用过的配置命令
  • 给历史加上时间戳,便于对照系统日志与告警时间点

典型用法

典型用法
history | grep -i dnf            # 按关键字回查历史命令
!120                             # 重放编号 120 的命令
sudo !!                          # 给上一条命令补 sudo 前缀
sudo !?service                   # 重放最近一条包含 service 的命令
HISTTIMEFORMAT='%F %T ' history | tail -20   # 带日期时间查看
history -c                       # 只清当前会话内存中的历史
history -w                       # 立即把当前会话历史写入文件

常用变量与快捷键

项作用设置示例
HISTSIZE内存中保存的条数HISTSIZE=10000
HISTFILESIZE历史文件保存的条数HISTFILESIZE=20000
HISTTIMEFORMAT记录并显示时间戳HISTTIMEFORMAT='%F %T '
HISTCONTROL过滤重复或空格开头命令HISTCONTROL=ignoredups
Ctrl+R交互式反向搜索连按可继续向前匹配
Ctrl+G退出搜索回到普通输入搜错时用它取消
历史文件在多个会话并发时默认互相覆盖,长期运维建议在 /etc/profile.d 里配置 histappend,让各会话追加写入而不是整份覆盖。
HISTTIMEFORMAT 只对配置生效之后产生的记录写入时间戳,查看旧记录没有时间属正常现象,不能据此判断记录被篡改。

易错点

  • 清历史不等于无痕:auditd、sudo 日志、堡垒机与 shell 层记录可能仍在,别把 history -c 当遮掩手段
  • 共享账号下历史混在一起,出现异常操作时无法区分执行者,关键动作应走受控脚本并留独立日志
  • 带敏感参数的命令会连同口令一并进入历史文件,敏感操作要改用交互输入或专用脚本
  • 只调大 HISTSIZE 不加 histappend,多会话并发仍会互相覆盖,两个配置要一起改

数据来源与参考

  • Bash 手册(History 章节)
  • 运维实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌