隐藏Bash历史记录
你是否曾登录Linux服务器后,突然意识到Bash会记录所有执行过的命令?这种情况我偶尔会遇到,因此专门研究了隐藏这些"失误"的方法。以下是我的发现,如果你有其他建议欢迎联系我。
常用方法对比
- 正常退出 - 历史记录会正常写入
- kill <bash进程ID>(服务端执行)- 不会写入历史记录。经测试不需要使用-9参数,普通kill命令就足以中断进程阻止写入
- kill <ssh进程ID>(客户端执行)- 即使使用-9参数也会写入历史记录
- set +o history - 不记录当前会话的任何命令。可在会话任意时刻执行,隐藏全部命令
- set -o history - 重新开启记录,但会记录set命令本身
- unset HISTFILE - 清除历史文件存储路径变量,阻止记录
- history -c - 完全清除历史记录(非常明显)
- export HISTIGNORE=“ls:cat**” - 设置不记录的命令列表(支持shell通配符)
- export HISTFILESIZE=10 - 限制历史文件只记录10条命令
- 编辑.bash_history文件 - 会话期间编辑会使得修改出现在当前会话命令之前
- 使用多个会话 - Bash按会话终止顺序写入历史文件
- 命令前加空格 - 根据配置可能不记录该命令(不同发行版效果不同)
- history -r - 重新读取历史文件,可配合编辑后使用
最佳实践
综合来看,“set +o history"可能是最佳通用方案,它能隐藏当前会话所有命令同时保留之前历史。但不同场景下其他方法可能更适用。
重要提示:依赖这些方法前请先测试。如果发现需要隐藏命令时不必惊慌,历史记录通常只在会话结束时写入(除非特殊配置为每条命令都记录)。
最后提醒:虽然其他shell可能不受这些方法影响,但生产环境服务器大多仍使用Bash。
支持本站 - 本站所有内容均为Robin Wood原创制作