文档首页> 技术教程> 让 history 更好用:时间戳、去重与搜索

让 history 更好用:时间戳、去重与搜索

发布时间:2026-03-22 13:52        更新时间:2026-03-22 18:37
history 命令人人会用,但默认状态下的它没时间、有重复、翻找全靠肉眼,稍微配置一下就能好用一个档次。 补上时间戳 默认的 history 只有序号和命令,排查"这台机器什么时候被人执行过什么"时缺了最关键的时间。在 ~/.bashrc 里加一行: ```bash export HISTTIMEFORMAT="%F %T " ``` 重新登录后,每条命令前面就是执行时间。注意它记录的是命令写入历史的时间,日常回看够用,但别把它当审计日志用。只想看最近一段,`history 20` 直接给尾部二十条,不用翻完整列表。纯水命令还可以用 HISTIGNORE 拦掉,比如 `export HISTIGNORE='ls:history:pwd'`,它们从此不再进历史。 加大容量、去掉重复 HISTSIZE 默认常常只有 1000 条,改大一点: ```bash export HISTSIZE=10000 export HISTFILESIZE=20000 export HISTCONTROL=ignoredups ``` ignoredups 让连续重复的命令只记一次,翻历史清爽很多;HISTFILESIZE 控制历史文件本身的上限,和 HISTSIZE 一起调大才不白配。想让多个终端的命令都进历史文件,再加 `PROMPT_COMMAND='history -a'`,每次执行命令后即追加。这里有个时机问题:默认退出终端才把历史整体写回,两个终端同时开着,后退出者会覆盖先写入的部分,加上 `shopt -s histappend` 改为追加模式,多终端并行就不丢了。 搜索比翻页快 真正的效率来自 Ctrl+R:按下后输入关键字,终端直接跳出最近匹配的命令,再按一次往前翻,回车执行。不习惯的话,`history | grep systemctl` 这种组合也能覆盖多数场景。还有两个顺手的写法:`!!` 重跑上一条命令,`sudo !!` 给它补上 root 权限;`!$` 引用上一条命令的最后一个参数,刚 `cat /etc/hosts` 看完,接着 `vim !$` 就直接编辑它。 这些配置写进 ~/.bashrc 才长期有效。末尾提个醒:history 是明文记录,带密码的命令(比如出现在参数里的数据库口令)改用交互式输入,别让敏感信息一直躺在历史文件里;共用机器上也不要随手 `history -c` 清空,那会连带抹掉排障时的操作回放线索。临时想留个手动后门,可以在 HISTCONTROL 里加 ignorespace,命令前敲一个空格便不入历史,应急可用,别养成依赖。