了解bash的{history`

时间:2015-06-04 10:32:54

标签: bash history

昨天我ssh - 进入我的RemoteFS并执行了一些命令。

今天他们没有出现在历史中。令人沮丧,因为花了一些时间来查看我使用的命令。

我经常遇到这个问题。我怀疑对多个同时进行的终端会话使用相同的登录可能会导致每个会话的单独历史记录。并且更改用户(例如,提升为超级用户)会打开一组不同的历史记录。

有人能科学地解释历史的生命周期吗?什么时候创建一个新的?如何访问/查看所有现有的?在什么情况下历史被摧毁?他们有没有得到合并?

1 个答案:

答案 0 :(得分:1)

取决于变量设置,但默认情况下,每个用户只有一个历史文件,而不是每个终端会话。

历史记录现在保存在内存缓冲区中,只有在缓冲区已满或注销时才会写入历史记录文件。因此,同一用户下的多个终端会话可以覆盖彼此的历史记录。历史记录系统不适合同一用户ID下的多个会话。

如果要将会话分开,请修改变量HISTFILE

设置可能看起来很整洁:

HISTFILE="$HOME/.bash_history$$"

其中$$给出当前的PID。虽然这为每个终端会话提供了自己的历史记录,但很快就会成为维护的噩梦,所有这些历史文件都会浮动。

还有其他控制历史记录的变量,有关说明,请参阅man bash。你也可以:

set | grep '^HIST'

这可能是有益的。

不要试图用文本编辑器编辑历史文件。它是一个二进制文件(包含非文本字段),可以很容易地被删除。

什么时候创建新文件?第一次使用历史文件名。

如何访问/查看所有现有的?取决于您给出的名称。

在什么情况下,历史会被破坏?超过HISTSIZE时(默认为500行)。仅存储HISTSIZE行。请记住,只有在内存缓冲区已满或注销时才会覆盖文件本身。但是我们有histappend选项:

shopt -s histappend

将附加会话而不是覆盖。小心使用它,你最终可能会得到一个巨大的历史文件。

他们是否合并过?不,除非您编写脚本来执行此操作,或者设置histappend