HISTSIZE
与有什么区别HISTFILESIZE
?
它们用于将 bash 历史记录扩展到默认的 500 行之外。
HISTSIZE
是 bash 会话正在进行时存储在历史列表中的内存中的行数或命令数。
HISTFILESIZE
是(a)在会话启动时允许在历史文件中的行数或命令数,以及(b)在 bash 会话结束时存储在历史文件中以供将来的会话使用。
file
注意: on disk - 和list
: in memory之间的区别。
以上所有信息+一些示例:
示例 1:
HISTFILESIZE=10
和HISTSIZE=10
histappend
未启用,命令 41 到 50 将保存到您的 HISTFILE 中,该文件现在包含它在开始时保存的 10 个命令以及 10 个新写入的命令。示例 2:
HISTFILESIZE=10
和HISTSIZE=5
histappend
未启用,命令 46 到 50 将保存到您的 HISTFILE 中,该文件现在具有它在开始时保存的 10 个命令以及 5 个新写入的命令。示例 3:
HISTFILESIZE=5
和HISTSIZE=10
histappend
未启用,命令 41 到 50 将保存到您的 HISTFILE 中,该文件现在具有它在开始时保存的 5 个命令以及 10 个新写入的命令。来自elixir_sinari的信息:
键入命令时,历史“文件”不会更新。这些命令分别存储在一个“列表”中(由历史命令访问)。这些存储命令的数量由 HISTSIZE 值控制。当 shell(交互式)退出时,最后的 $HISTSIZE 行从该“列表”复制/附加到 $HISTFILE。如果设置了 HISTFILESIZE,则在此操作之后,确保 $HISTFILE 中仅存在 $HISTFILESIZE 行(最新)。当 shell 启动时,“列表”从 $HISTFILE 初始化到最多 $HISTSIZE 命令。
并从man bash
页面:
HISTSIZE 变量的值用作要保存在历史列表中的命令数。最后一个 HISTSIZE 命令的文本(默认 500)被保存。(...)
启动时,历史从由变量 HISTFILE 命名的文件初始化(默认为 ~/.bash_history)。如有必要,由 HISTFILE 值命名的文件将被截断,以包含不超过 HISTFILESIZE 值指定的行数。(...) 当一个交互式 shell 退出时,最后的 $HISTSIZE 行从历史列表复制到 $HISTFILE。如果启用了 histappend shell 选项(请参见下面 SHELL BUILTIN COMMANDS 下的 shopt 描述),则将这些行附加到历史文件中,否则将覆盖历史文件。如果 HISTFILE 未设置,或者历史文件不可写,则不保存历史记录。(...) 保存历史记录后,历史记录文件被截断为不超过 HISTFILESIZE 行。如果未设置 HISTFILESIZE,
建立在 arturomp 所说的基础之上,并努力使其更加清晰。
假设你有 2000 多年的历史..
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2027 78
2028 57
2029 yu45u
您可以减少显示的内容HISTSIZE
~$ HISTSIZE=5
~$ history
2026 546
2027 78
2028 56
2029 yu45u
2030 HISTSIZE=5
现在,无论您键入多少命令,都只会记录最后 5 个命令。
~$ ABC
~$ GGH
~$ GSDHFG
~$ JFDR
~$ ABSDDS
~$ AHFGHFD
<close terminal>
<open new terminal>
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2028 56
2029 yu45u
2030 HISTSIZE=5
2031 GGH
2032 GSDHFG
2033 JFDR
2034 ABSDDS
2035 AHFGHFD
我们可以清楚地看到我们的第一个命令(“ABC”)不在历史记录中,因为只记录了最后 5 个命令。
现在,全部历史记录存储在一个文件 ( .bash_history
) 中,您可以使用HISTFILESIZE
. 例如2033
HISTFILESIZE
,在我的情况下,我会有这个:
~$ history
1 fghfghdf
2 gegege
3 gege
.. ..
2028 HISTSIZE=5
2029 GGH
2030 GSDHFG
2031 JFDR
2032 ABSDDS
2033 AHFGHFD