bash 的历史记录存储在哪里?

bash 的历史记录存储在哪里?

如果我运行history,我可以看到我最新执行的命令。

但如果我这样做tail -f $HISTFILEtail -f ~/.bash_history,它们就不会被列出。

文件是否被锁定,是否有临时位置或类似的位置?

答案1

Bash 在运行时在内存中内部维护命令列表。它们被写入.bash_history退出时:

当交互式 shell 退出时,最后 $HISTSIZE 行将从历史列表复制到 $HISTFILE 命名的文件中

如果你想强制写出命令历史记录,你可以使用history -a命令,这将:

将新的历史记录行(自当前 Bash 会话开始以来输入的历史记录行)附加到历史记录文件。

还有一个-w选项:

将当前历史记录写入历史文件。

这可能更适合您,具体取决于您如何使用历史记录。

如果您想确保它们始终立即写入,您可以将该命令放入PROMPT_COMMAND变量中:

export PROMPT_COMMAND='history -a'

答案2

(不是答案,但我无法添加评论)

.bash_history如果您只是想删除某个特定命令(例如包含明文密码)而进行检查,则可以通过 直接删除内存中的条目history -d <entry_id>

例如,假设输出如下:

$ history
926  ll
927  cd ..
928  export --password=super_secret
929  ll

如果你想清理export线路,你可以简单地通过以下方式实现:

history -d 928

答案3

bash 将其保存在工作内存中,bash 可以配置为在 bash 关闭时或在每个命令之后保存它,并在 bash 启动时或根据请求加载。

如果您配置在每个命令后保存,请考虑同时运行多个 bash 的影响。 (命令行将交错)

答案4

当会话处于活动状态时,命令将保存在内存 (RAM) 中。一旦关闭 shell,命令列表就会.bash_history在关闭之前写入。

因此,您不会在 中看到当前会话的历史记录.bash_history

相关内容