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 只对配置生效之后产生的记录写入时间戳,查看旧记录没有时间属正常现象,不能据此判断记录被篡改。