Bash HISTSIZE VS HISTFILESIZE?

edqdpe6u  于 2022-10-17  发布在  Unix
关注(0)|答案(2)|浏览(196)

HISTSIZEHISTFILESIZE有什么不同?
它们用于将bash历史记录扩展到超过默认的500行。
这里和其他论坛似乎都不清楚为什么两者都是必要的。(Example 1,示例2,Example 3)。

erhoui1w

erhoui1w1#

简答:

HISTSIZE是bash会话进行期间存储在历史列表中内存中的行数或命令数。
HISTFILESIZE是(A)在会话启动时允许在历史文件中使用的行数或命令数,以及(B)在bash会话结束时存储在历史文件中以供将来会话使用的行数或命令数。
注意磁盘上的file和内存中的list之间的区别。

长答案:

以上所有信息加上一些例子:

示例1HISTFILESIZE=10HISTSIZE=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。

示例2HISTFILESIZE=10HISTSIZE=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。

示例3HISTFILESIZE=5HISTSIZE=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,则不执行截断。

mv1qrgav

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,在我的示例中,我将拥有以下内容:

~$ history
    1  fghfghdf
    2  gegege
    3  gege
   ..  ..
 2028  HISTSIZE=5
 2029  GGH
 2030  GSDHFG
 2031  JFDR
 2032  ABSDDS
 2033  AHFGHFD

相关问题