写点什么

隐藏 Bash 历史记录:实用技巧与最佳方法

作者:qife
  • 2025-07-16
    福建
  • 本文字数:1192 字

    阅读完需:约 4 分钟

隐藏 Bash 历史记录

Mon 1st Oct 18


您是否曾经登录到 Linux 机器,开始运行命令,然后想起 bash 历史记录会记录您运行的一切?我偶尔会这样做,所以我想我应该研究一下有哪些选项可以隐藏这个错误。以下是我的发现,如果您有其他想法,请联系我。


  • 正常退出:历史记录正常写入。

  • 杀死 <bash 进程 ID>:在服务器端运行 - 不写入历史记录。我检查了是否需要-9,但不需要,基本的 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 历史文件在会话终止时写入,因此使用两个会话,第一个终止时先写入,然后第二个终止时写入。

  • 在命令前加空格:取决于配置,在命令前加空格可以阻止其被记录。如果您已经输入不想记录的内容,用处不大,但可能在看似无辜的命令之间插入几个命令。在依赖之前测试此方法,因为它因发行版和用户配置而异。更多信息见这篇博客文章:Using Bash History More Efficiently: HISTCONTROL(原文未提供链接,仅引用标题)。

  • history -r:运行此命令会重新读取历史文件,有效地将历史重置回登录时的状态。这似乎是非常有用的命令,特别是您可以编辑历史文件,发出命令,然后关闭 shell。这会写出修改后的历史记录,没有更改的痕迹。


基于所有这些,“set +o history”可能是最佳通用方法,因为它隐藏了当前会话中使用的所有命令,但保留了之前的历史记录,然而其他技术可能在不同场景中有帮助。


确保在需要依赖它们之前进行测试,如果您在机器上并意识到需要隐藏某些东西,不要惊慌,历史记录只在会话结束时写入,因此只要您的连接稳定,您就有时间停下来、思考、做一些研究,然后再行动。注意:@JPoForenso 提到这可以被覆盖为在每条命令时写入。


在有人喊出“但我使用<blah shell>,不是 Bash,所以我免受这些影响”之前,是的,您可能如此,但当我登录到一个不运行 Bash 的生产机器的那一天,就是我开始研究它们的那一天。更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
隐藏Bash历史记录:实用技巧与最佳方法_Linux_qife_InfoQ写作社区