shell历史记录是可检索、持久、定制的工作资产,需配置histsize、histfilesize等变量实现跨会话保存,并用ctrl+r、history|grep、!编号高效检索;powershell用户应启用psreadline自动持久化。

Shell历史记录不是“用完即丢”的临时缓存,而是可检索、可持久、可定制的工作资产。关键在于把零散命令变成可追溯、可复用的线索。
快速定位历史命令
手动翻页效率低,推荐三种高效搜索方式:
- Ctrl+R 反向搜索:实时匹配最近执行过的命令,输入关键词后连续按 Ctrl+R 切换上一条匹配项,Esc 退出不执行
-
history | grep 关键词:例如
history | grep git,返回含关键词的命令及其编号,适合批量查看 -
!前缀 或 !编号:如
!git执行最近以 git 开头的命令;!123直接重跑第 123 条历史命令
让历史真正“记住你”
默认只保存当前会话,退出就丢失。要实现跨终端、跨重启的持久化,需配置以下环境变量:
- HISTSIZE=10000:内存中保留的历史条数(建议设大些)
-
HISTFILESIZE=20000:写入
~/.bash_history文件的最大行数 - HISTTIMEFORMAT='%F %T ':启用时间戳,命令会带日期和时间写入历史文件
- HISTCONTROL=ignoreboth:自动忽略重复命令和以空格开头的命令(防敏感指令入史)
把这些写进 ~/.bashrc 后运行 source ~/.bashrc 生效。
避免历史被污染或覆盖
有些命令不该记,有些记录需要隔离:
- 执行前加空格,如
ls /tmp(开头有空格),该命令不会进入历史 - 用
HISTIGNORE='ls:cd:pwd:exit'屏蔽常用但无价值的命令 - 多终端并行工作时,及时同步:执行
history -a把当前会话新命令追加到文件;用history -n把其他会话写入的命令读进当前缓冲区
PowerShell 用户注意
Bash 的 history 是单会话的,PowerShell 默认也一样。但启用 PSReadLine 后,历史自动持久化到:$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
- 确认开启:
Get-PSReadLineOption | Select-Object HistorySavePath, MaximumHistoryCount - 如未启用,运行
Install-Module PSReadLine -Force并重启 PowerShell - 想全局查所有命令?用自定义函数读取该文件,再按关键词或时间过滤











