bash HISTSIZE与HISTFILESIZE?
HISTSIZE
与HISTFILESIZE
什么HISTFILESIZE
?
它们用于扩展超出默认500行的bash历史logging。
这里和其他论坛似乎缺乏明确的解释,为什么他们都需要。 ( 实施例1 , 实施例2 , 实施例3 )。
简短的回答:
HISTSIZE
是当您的bash会话正在进行时,在历史列表中存储在内存中的行或命令的数量。
HISTFILESIZE
是历史文件在会话启动时允许(a)允许的行数或命令数量,(b)存储在bash会话结束时的历史logging文件中,供将来的会话使用。
注意磁盘上的文件和内存中的列表之间的区别。
很长的回答:
以上所有信息+一些例子:
HISTFILESIZE=10
和HISTSIZE=10
- 你开始你的会议。
- 您的HISTFILE(存储您的bash命令历史logging的文件)被截断为包含HISTFILESIZE = 10行。
- 你写50行。
- 在50条命令的结尾处,只有命令41到50位于历史列表中,其大小由HISTSIZE = 10确定。
- 你结束你的会议。
- 假设
histappend
没有启用,命令41到50被保存到你的HISTFILE,HISTFILE现在有10个命令在开始时加上10个新写入的命令。 - 您的HISTFILE被截断包含HISTFILESIZE = 10行。
- 假设
- 现在,您的历史logging中有10条命令 – 刚刚完成的会话中最后input的10条命令。
- 当你开始一个新的会话时,你从1开始HISTFILESIZE = 10的HISTFILE。
HISTFILESIZE=10
和HISTSIZE=5
- 你开始你的会议。
- 您的HISTFILE(存储您的bash命令历史logging的文件)被截断为至多包含HISTFILESIZE = 10行。
- 你写50行。
- 在50条命令的结尾处,只有命令46到50位于历史列表中,其大小由HISTSIZE = 5确定。
- 你结束你的会议。
- 假设
histappend
没有被启用,命令46到50被保存到你的HISTFILE,HISTFILE现在有10个命令在开始时加上5个新写入的命令。 - 您的HISTFILE被截断包含HISTFILESIZE = 10行。
- 假设
- 现在,您的历史logging中有10条命令 – 前一个会话为5个,刚完成的会话中只有最后5个。
- 当你开始一个新的会话时,你从1开始HISTFILESIZE = 10的HISTFILE。
HISTFILESIZE=5
和HISTSIZE=10
- 你开始你的会议。
- 您的HISTFILE(存储您的bash命令历史logging的文件)被截断为至多包含HISTFILESIZE = 5行。
- 你写50行。
- 在50条命令的结尾处,只有命令41到50位于历史列表中,其大小由HISTSIZE = 10确定。
- 你结束你的会议。
- 假设
histappend
没有启用,命令41到50被保存到你的HISTFILE,HISTFILE现在有5个命令在开始时加上10个新写入的命令。 - 您的HISTFILE被截断包含HISTFILESIZE = 5行。
- 假设
- 您的历史logging中现在有5条命令 – 刚才在刚完成的会话中键入的最后5条命令。
- 当您开始一个新的会话时,您将从第1步开始,HISTFILESIZE = 5的HISTFILE。
来自elixir_sinari的信息:
input命令时,历史“文件”不会更新。 这些命令分别存储在“列表”中(由历史命令访问)。 这些存储的命令的数量由HISTSIZE值控制。 当shell(交互式)退出时,最后的$ HISTSIZE行被从“list”复制/追加到$ HISTFILE中。 如果HISTFILESIZE被设置,那么在这个操作之后,确保$ HISTFILE中只有$ HISTFILESIZE行(最新)。 当shell启动时,“list”从$ HISTFILE初始化为最大$ HISTSIZE命令。
并从man bash
页面:
HISTSIZEvariables的值用作保存在历史列表中的命令的数量。 最后的HISTSIZE命令的文本(默认500)被保存。 (……)
启动时,历史logging将从variablesHISTFILE(默认〜/ .bash_history)命名的文件初始化。 如果需要,由HISTFILE的值命名的文件将被截断,以包含不超过由HISTFILESIZE的值指定的行数。 (…)当交互式shell退出时,最后的$ HISTSIZE行会从历史列表中复制到$ HISTFILE。 如果启用了histappend shell选项(请参阅下面的SHELL BUILTIN COMMANDS下的shopt描述),这些行将被追加到历史文件中,否则历史文件将被覆盖。 如果HISTFILE未设置,或者历史文件不可写入,则不保存历史logging。 (…)保存历史logging后,历史文件将被截断为不超过HISTFILESIZE行。 如果未设置HISTFILESIZE,则不执行截断。
build立在arturomp所说的之上,并努力使之更清晰。
假设你有2000多年的历史..
~$ history 1 sdf 2 fghdfgjf 3 fghfghdf .. .. 2027 78 2028 57 2029 yu45u
你可以减less你用HISTSIZE
显示的HISTSIZE
~$ HISTSIZE=5 ~$ history 2026 546 2027 78 2028 56 2029 yu45u 2030 HISTSIZE=5
现在,无论您键入多less个命令,只会logging最后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”)不在历史中,因为只logging了最后的5个命令。
现在,总的历史被存储在一个文件( .bash_history
)中,你可以改变这个文件用HISTFILESIZE
获得的HISTFILESIZE
。 例如2033
HISTFILESIZE
,在我的情况下,我会有这样的:
~$ history 1 fghfghdf 2 gegege 3 gege .. .. 2028 HISTSIZE=5 2029 GGH 2030 GSDHFG 2031 JFDR 2032 ABSDDS 2033 AHFGHFD