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
线,则可以通过以下方式简单地实现: br /> history -d 928
#3 楼
bash将其保存在工作内存中,可以将bash配置为在bash关闭时或在每个命令之后保存,并在bash启动时或根据请求进行加载。如果配置为在每个命令之后保存,然后考虑同时运行多个bash的含义。 (命令行将交错)
评论
答案的开始听起来像历史记录存储在名为bash的文件中,甚至存储在可执行的bash中。我会写“它由bash存储在内存中,...”
–安东
2014年7月18日在9:08
确实更好
–安东
14年7月18日在13:24
#4 楼
在运行时,历史记录仅在以下情况下保留在内存中(默认情况下):设置了-o history(
H
中的echo "$-"
)。HISTSIZE不是
0
并且HISTIGNORE不是
*
(或其他一些限制性很强的模式)。如果以上任何一个失败,则不会在内存中存储任何历史记录,因此任何历史记录都不会也不会
如果满足以下条件,则将内存中的历史记录写入磁盘:
HISTFILESIZE不为0并且未设置
HISTFILE。
但仅当shell退出或执行
history -a
(附加)或history -w
(写入)命令时。要触发立即写入磁盘,可以使用变量:
PROMPT_COMMAND='history -a'
,这会将
append
历史记录行记录到历史记录文件中。这些是自当前bash会话开始以来输入的历史记录行,但尚未附加到历史记录文件中。或:
PROMPT_COMMAND='history -w'
要使用内存中的列表覆盖HISTFILE中的历史记录。
因此,您可以从内存中的历史记录中删除命令:
$ history 5
6359 ls
6360 cd ..
6361 comand --private-password='^%^&$@#)!@*'
6362 top
6363 set +o | less
$ history -d 6361
$ history 5
6359 ls
6360 cd ..
6361 top
6362 set +o | less
$ history -w
并使用最后一条命令将其写入磁盘:
history -w # with `shopt -u histappend` unset
评论
将此工作放在cron作业中会有什么问题吗?我怀疑很多用户名少得多的用户正在登录到特定服务器,并且历史记录仍然很小,这是一台旧服务器,但是也许某些会话从未关闭过...
–oneindelijk
19-10-2在11:26
@oneindelijk历史记录仅将当前shell的内存中历史记录写入历史记录文件。 Cron作业可能无法访问其他正在运行的Shell的历史记录。
–wensveen
20 Mar 27 '20 at 14:22
我们如何防止多个终端命令历史相互干扰?
–本征场
20-09-5在8:19
#5 楼
会话处于活动状态时,命令将保存在内存(RAM)中。关闭外壳程序后,命令列表将在关闭前写入.bash_history
。,因此,您不会在
.bash_history
中看到当前会话的历史记录。 评论
在bash终止时更新历史记录文件,这并不意味着重新引导(尤其是在您可以根据需要打开和关闭终端的图形环境中)。
–John WH Smith
2014年7月18日12:50
评论
旁注:如果您的.bash_history文件意外地由root拥有,则一切都会停止。在这种情况下,请检查所有权,并在需要时使用sudo修复所有权。
–torek
19年7月4日在3:53