如果我运行history
,我可以看到我最新执行的命令。
但如果我这样做tail -f $HISTFILE
或tail -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
。