Answers:
HISTSIZE
是您的bash会话正在进行时存储在历史记录列表的内存中的行数或命令数。
HISTFILESIZE
是(a)在会话启动时历史文件中允许的行数或命令数,以及(b)在bash会话结束时存储在历史文件中以供将来会话使用的行数或命令数。
注意file
磁盘上的:和list
内存中的:之间的区别。
以上所有信息和一些示例:
示例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的信息:
键入命令时,历史记录“文件”不会更新。这些命令分别存储在“列表”中(由history命令访问)。这些存储的命令数由HISTSIZE值控制。当外壳程序(交互式)退出时,最后的$ HISTSIZE行从该“列表”复制/追加到$ HISTFILE中。如果设置了HISTFILESIZE,则在执行此操作后,确保$ HISTFILE中仅存在$ HISTFILESIZE行(最新)。并且,当外壳程序启动时,“列表”将从$ HISTFILE初始化到最多$ HISTSIZE命令。
从man bash
页面上:
HISTSIZE变量的值用作要保存在历史记录列表中的命令数。最后的HISTSIZE命令的文本(默认为500)已保存。(...)
启动时,将从变量HISTFILE(默认〜/ .bash_history)命名的文件中初始化历史记录。如果需要的话,以HISTFILE的值命名的文件将被截断,以包含不超过HISTFILESIZE的值指定的行数。(...)退出交互式外壳程序时,最后的$ 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
HISTSIZE=-1
和HISTFILESIZE=-1
。
bash
手册页说: Non-numeric values and numeric values less than zero inhibit truncation
但是然后我没有勇气检查这是否正确,因为我不想失去我的历史:-)
HISTSIZE='INFINITY'
和HISTFILESIZE='ANDBEYOND'
。由于它们是非数字的,因此可以保存所有内容。谢谢你的提示!