art*_*omp 249
HISTSIZE 是bash会话正在进行时,历史记录列表中存储在内存中的行数或命令数.
HISTFILESIZE 是在会话启动时历史文件中允许的(a)行数或命令数,以及(b)在bash会话结束时存储在历史文件中以供将来会话使用.
注意内存中文件 - 磁盘 - 和列表之间的区别.
以上所有信息+一些例子:
file 和 list
HISTFILESIZE=10未启用,命令41到50将保存到您的HISTFILE,它现在具有它在开头保存的10个命令以及10个新写入的命令.HISTSIZE=10 和 histappend
HISTFILESIZE=10未启用,命令46到50将保存到您的HISTFILE中,该HISTFILE现在具有它在开头保存的10个命令以及5个新写入的命令.HISTSIZE=5 和 histappend
HISTFILESIZE=5未启用,命令41到50将保存到您的HISTFILE,它现在具有它在开头保存的5个命令以及10个新写入的命令.来自elixir_sinari的信息:
键入命令时,不会更新历史记录"文件".命令分别存储在"列表"中(由历史命令访问).这些存储命令的数量由HISTSIZE值控制.当shell(交互式)退出时,最后的$ HISTSIZE行从该"列表"复制/附加到$ HISTFILE.如果设置了HISTFILESIZE,则在此操作之后,确保$ HISTFILE中仅存在$ HISTFILESIZE行(最新).当shell启动时,"list"从$ HISTFILE初始化到最多$ HISTSIZE命令.
并从HISTSIZE=10页面:
HISTSIZE变量的值用作要保存在历史列表中的命令数.保存最后一个HISTSIZE命令的文本(默认为500).(......)
在启动时,历史记录从变量HISTFILE命名的文件初始化(默认为〜/ .bash_history).如有必要,将截断由HISTFILE值指定的文件,以包含不超过HISTFILESIZE值指定的行数.(...)当交互式shell退出时,最后的$ HISTSIZE行将从历史列表复制到$ HISTFILE.如果启用了histappend shell选项(请参阅下面的SHELL BUILTIN命令下的shopt说明),这些行将附加到历史文件中,否则将覆盖历史文件.如果未设置HISTFILE,或者历史文件不可写,则不保存历史记录.(...)保存历史记录后,历史文件将被截断为包含不超过HISTFILESIZE行.如果没有设置HISTFILESIZE,
建立在 arturomp 所说的基础上,并努力使其更加清晰。
假设你有 2000 年的悠久历史..
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2027 78
2028 57
2029 yu45u
Run Code Online (Sandbox Code Playgroud)
您可以减少显示的内容 HISTSIZE
~$ HISTSIZE=5
~$ history
2026 546
2027 78
2028 56
2029 yu45u
2030 HISTSIZE=5
Run Code Online (Sandbox Code Playgroud)
现在,无论您键入多少命令,都只会记录最后 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
Run Code Online (Sandbox Code Playgroud)
我们可以清楚地看到我们的第一个命令(“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
Run Code Online (Sandbox Code Playgroud)