如何从当前运行的bash会话中恢复被截断的原始历史记录
操作前提
绝对不要关闭这个在截断操作前就打开的bash会话,所有操作均在该会话内执行。
步骤1:临时调整会话历史配置,避免旧记录被清理
先执行2条命令,确保内存中的历史不会被自动截断:
# 调大当前会话的内存历史存储上限,防止旧记录被自动清除 HISTSIZE=100000 # 设置历史输出格式为带Unix时间戳的形式,方便后续转换 HISTTIMEFORMAT='@%s '
步骤2:导出内存中全量历史记录
执行以下命令导出所有内存中的历史条目到临时文件:
# history 1 表示输出从第1条开始的所有历史,避免默认截断 history 1 > full_history.tmp
导出的full_history.tmp里前300条是你后续新执行的命令,301条及之后就是你要恢复的旧历史记录。
步骤3:转换为要求的格式并提取旧历史
执行awk命令直接处理导出的文件,跳过前300条新记录,输出你需要的时间戳格式:
awk 'NR>300 { sub(/@/, "", $2) print "#" $2 $1 = $2 = "" print substr($0, 3) }' full_history.tmp > restored_history
如果你后续新执行的命令条数不是300,可以自行修改上面命令里的
NR>300的阈值,跳过不需要的新条目即可。
步骤4:合并回bash历史文件(可选)
如果需要把恢复的历史永久加入你的bash历史,执行以下命令追加到历史文件(不要直接覆盖,避免现有内容丢失):
cat restored_history >> ~/.bash_history
最后执行head restored_history验证输出符合要求即可。
内容的提问来源于stack exchange,提问作者precompute
相关产品推荐
相关产品推荐

