HISTSIZE和HISTFILESIZE有什么不同?它们用于将bash历史记录扩展到超过默认的500行。这里和其他论坛似乎都不清楚为什么两者都是必要的。(Example 1,示例2,Example 3)。
HISTSIZE
HISTFILESIZE
erhoui1w1#
HISTSIZE是bash会话进行期间存储在历史列表中内存中的行数或命令数。HISTFILESIZE是(A)在会话启动时允许在历史文件中使用的行数或命令数,以及(B)在bash会话结束时存储在历史文件中以供将来会话使用的行数或命令数。注意磁盘上的file和内存中的list之间的区别。
file
list
以上所有信息加上一些例子:
示例1:HISTFILESIZE=10和HISTSIZE=10
HISTFILESIZE=10
HISTSIZE=10
1.您可以开始您的会话。1.您的HISTFILE(存储bash命令历史记录的文件)被截断为包含HISTFILESIZE=10行。1.你写了50行。1.在50个命令的末尾,您的历史记录列表中只有41到50个命令,其大小由HISTSIZE=10决定。1.结束您的会话。1.假设histappend未启用,命令41到50将保存到HISTFILE中,现在HISTFILE中包含开头保存的10个命令以及新写入的10个命令。1.您的HISTFILE被截断为包含HISTFILESIZE=10行。1.现在,您的历史记录中有10条命令--您刚刚在刚完成的会话中输入的最后10条命令。1.开始新会话时,从步骤1开始,HISTFILE为HISTFILESIZE=10。
histappend
示例2:HISTFILESIZE=10和HISTSIZE=5
HISTSIZE=5
1.您可以开始您的会话。1.您的HISTFILE(存储bash命令历史记录的文件)被截断为最多包含HISTFILESIZE=10行。1.你写了50行。1.在50个命令的末尾,您的历史记录列表中只有46到50个命令,其大小由HISTSIZE=5确定。1.结束您的会话。1.假设histappend未启用,命令46到50将保存到HISTFILE中,现在HISTFILE中包含开头保存的10个命令以及新写入的5个命令。1.您的HISTFILE被截断为包含HISTFILESIZE=10行。1.现在您的历史记录中有10个命令--前一个会话中的5个命令和您刚刚完成的会话中刚刚输入的最后5个命令。1.开始新会话时,从步骤1开始,HISTFILE为HISTFILESIZE=10。
示例3:HISTFILESIZE=5和HISTSIZE=10
HISTFILESIZE=5
1.您可以开始您的会话。1.您的HISTFILE(存储bash命令历史记录的文件)被截断为最多包含HISTFILESIZE=5行。1.你写了50行。1.在50个命令的末尾,您的历史记录列表中只有41到50个命令,其大小由HISTSIZE=10决定。1.结束您的会话。1.假设histappend未启用,则命令41到50将保存到HISTFILE中,现在HISTFILE中包含开头保存的5个命令以及新写入的10个命令。1.您的HISTFILE被截断为包含HISTFILESIZE=5行。1.现在,您的历史记录中有5条命令--您刚刚在刚完成的会话中输入的最后5条命令。1.开始新会话时,从步骤1开始,HISTFILE为HISTFILESIZE=5。来自elixir_sinari的信息:在您键入命令时,历史“文件”不会更新。这些命令被单独存储在“列表”中(通过HISTORY命令访问)。这些存储的命令的数量由HISTSIZE值控制。当外壳程序(交互式)退出时,最后的$HISTSIZE行将被复制/附加到该“列表”中的$HISTFILE。如果设置了HISTFILESIZE,则在此操作之后,可以确保$HISTFILE中只有$HISTFILESIZE行(LATEST)。当外壳启动时,“列表”从$HISTFILE初始化到最多$HISTSIZE命令。并从man bash页面:HISTSIZE变量的值用作要保存在历史记录列表中的命令数。保存最后一个HISTSIZE命令(默认为500)的文本。(.)在启动时,历史记录从由变量HISTFILE(默认为~/.bash_HISTORY)命名的文件中初始化。如有必要,由HISTFILE的值命名的文件将被截断,以包含不超过由HISTFILESIZE的值指定的行数。(.)当交互外壳退出时,最后的$HISTSIZE行将从历史列表复制到$HISTFILE。如果启用了visappend外壳选项(请参阅下面的在外壳BUILTIN命令下对SHORT的描述),这些行将被附加到历史文件,否则历史文件将被覆盖。如果未设置HISTFILE,或者历史记录文件不可写,则不保存历史记录。(.)保存历史记录后,历史记录文件将被截断,以包含不超过HISTFILESIZE行。如果未设置HISTFILESIZE,则不执行截断。
man bash
mv1qrgav2#
建立在阿图罗普所说的基础上,并努力使其更清晰。算起来你有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更改该文件的长度。例如,使用2033HISTFILESIZE,在我的示例中,我将拥有以下内容:
.bash_history
2033
~$ history 1 fghfghdf 2 gegege 3 gege .. .. 2028 HISTSIZE=5 2029 GGH 2030 GSDHFG 2031 JFDR 2032 ABSDDS 2033 AHFGHFD
2条答案
按热度按时间erhoui1w1#
简答:
HISTSIZE
是bash会话进行期间存储在历史列表中内存中的行数或命令数。HISTFILESIZE
是(A)在会话启动时允许在历史文件中使用的行数或命令数,以及(B)在bash会话结束时存储在历史文件中以供将来会话使用的行数或命令数。注意磁盘上的
file
和内存中的list
之间的区别。长答案:
以上所有信息加上一些例子:
示例1:
HISTFILESIZE=10
和HISTSIZE=10
1.您可以开始您的会话。
1.您的HISTFILE(存储bash命令历史记录的文件)被截断为包含HISTFILESIZE=10行。
1.你写了50行。
1.在50个命令的末尾,您的历史记录列表中只有41到50个命令,其大小由HISTSIZE=10决定。
1.结束您的会话。
1.假设
histappend
未启用,命令41到50将保存到HISTFILE中,现在HISTFILE中包含开头保存的10个命令以及新写入的10个命令。1.您的HISTFILE被截断为包含HISTFILESIZE=10行。
1.现在,您的历史记录中有10条命令--您刚刚在刚完成的会话中输入的最后10条命令。
1.开始新会话时,从步骤1开始,HISTFILE为HISTFILESIZE=10。
示例2:
HISTFILESIZE=10
和HISTSIZE=5
1.您可以开始您的会话。
1.您的HISTFILE(存储bash命令历史记录的文件)被截断为最多包含HISTFILESIZE=10行。
1.你写了50行。
1.在50个命令的末尾,您的历史记录列表中只有46到50个命令,其大小由HISTSIZE=5确定。
1.结束您的会话。
1.假设
histappend
未启用,命令46到50将保存到HISTFILE中,现在HISTFILE中包含开头保存的10个命令以及新写入的5个命令。1.您的HISTFILE被截断为包含HISTFILESIZE=10行。
1.现在您的历史记录中有10个命令--前一个会话中的5个命令和您刚刚完成的会话中刚刚输入的最后5个命令。
1.开始新会话时,从步骤1开始,HISTFILE为HISTFILESIZE=10。
示例3:
HISTFILESIZE=5
和HISTSIZE=10
1.您可以开始您的会话。
1.您的HISTFILE(存储bash命令历史记录的文件)被截断为最多包含HISTFILESIZE=5行。
1.你写了50行。
1.在50个命令的末尾,您的历史记录列表中只有41到50个命令,其大小由HISTSIZE=10决定。
1.结束您的会话。
1.假设
histappend
未启用,则命令41到50将保存到HISTFILE中,现在HISTFILE中包含开头保存的5个命令以及新写入的10个命令。1.您的HISTFILE被截断为包含HISTFILESIZE=5行。
1.现在,您的历史记录中有5条命令--您刚刚在刚完成的会话中输入的最后5条命令。
1.开始新会话时,从步骤1开始,HISTFILE为HISTFILESIZE=5。
来自elixir_sinari的信息:
在您键入命令时,历史“文件”不会更新。这些命令被单独存储在“列表”中(通过HISTORY命令访问)。这些存储的命令的数量由HISTSIZE值控制。当外壳程序(交互式)退出时,最后的$HISTSIZE行将被复制/附加到该“列表”中的$HISTFILE。如果设置了HISTFILESIZE,则在此操作之后,可以确保$HISTFILE中只有$HISTFILESIZE行(LATEST)。当外壳启动时,“列表”从$HISTFILE初始化到最多$HISTSIZE命令。
并从
man bash
页面:HISTSIZE变量的值用作要保存在历史记录列表中的命令数。保存最后一个HISTSIZE命令(默认为500)的文本。(.)
在启动时,历史记录从由变量HISTFILE(默认为~/.bash_HISTORY)命名的文件中初始化。如有必要,由HISTFILE的值命名的文件将被截断,以包含不超过由HISTFILESIZE的值指定的行数。(.)当交互外壳退出时,最后的$HISTSIZE行将从历史列表复制到$HISTFILE。如果启用了visappend外壳选项(请参阅下面的在外壳BUILTIN命令下对SHORT的描述),这些行将被附加到历史文件,否则历史文件将被覆盖。如果未设置HISTFILE,或者历史记录文件不可写,则不保存历史记录。(.)保存历史记录后,历史记录文件将被截断,以包含不超过HISTFILESIZE行。如果未设置HISTFILESIZE,则不执行截断。
mv1qrgav2#
建立在阿图罗普所说的基础上,并努力使其更清晰。
算起来你有2000多年的悠久历史..
您可以使用
HISTSIZE
减少显示的内容现在,无论您输入多少命令,都只会记录最后5个命令。
我们可以清楚地看到,我们的第一个命令(“abc”)不在历史中,因为只记录了最后5个命令。
现在,总历史记录存储在一个文件(
.bash_history
)中,您可以使用HISTFILESIZE
更改该文件的长度。例如,使用2033
HISTFILESIZE
,在我的示例中,我将拥有以下内容: