利用HISTFILESIZE和HISTSIZE在ubunutu中调整命令行History的Size

每个用户的家目录中都有一个文件来保存会话中的命令行历史(默认为~/.bash_history,但由HISTFILE控制),当一个会话结束之后,就会根据命令行history的Size把该会话中的命令保存在命令行历史文件中。

那么如何控制它的大小?

有两个变量在控制命令行历史的大小:

  • HISTFILESIZE

HISTFILESIZE The maximum number of lines contained in the history file. When this variable is assigned a value, the history file is truncated, if necessary, to contain no more than that number of lines by removing the oldest entries. The history file is also truncated to this size after writing it when a shell exits. If the value is 0, the history file is truncated to zero size. Non-numeric values and numeric values less than zero inhibit truncation. The shell sets the default value to the value of HISTSIZE after reading any startup files.
HISTFILESIZE 历史文件中包含的最大行数。 当这个变量被赋值时,如果需要,历史文件被截断,通过删除最旧的条目来包含不超过该数量的行。 当 shell 退出时,历史文件在写入后也会被截断为这个大小。 如果值为 0,则历史文件被截断为零大小。 非数值和小于零的数值禁止截断。 shell 在读取任何启动文件后将默认值设置为 HISTSIZE 的值。

  • HISTSIZE

HISTSIZE The number of commands to remember in the command history (see HISTORY below). If the value is 0, commands are not saved in the history list. Numeric values less than zero result in every command being saved on the history list (there is no limit). The shell sets the default value to 500 after reading any startup files.
HISTSIZE 命令历史记录中要记住的命令数量(请参阅下面的历史记录)。 如果值为 0,则命令不保存在历史列表中。 小于零的数值会导致每个命令都保存在历史列表中(没有限制)。 读取任何启动文件后,shell 将默认值设置为 500。

这两个变量允许您控制历史记录的行为。 基本上,HISTSIZE 是当前会话期间保存的命令数,HISTFILESIZE 是跨会话记住的命令数。 因此,例如:

$ echo $HISTSIZE 
10
$ echo $HISTFILESIZE 
5
$ history | wc
     10      29     173

在上面的示例中,因为 HISTSIZE 设置为 10,所以 history 返回一个包含 10 个命令的列表。 然而,如果你注销然后重新登录,history 将只返回 5 个命令,因为 HISTFILESIZE 设置为 5。这是因为,一旦你退出会话,你的历史记录的 HISTFILESIZE 行将保存到 你的历史文件(默认为~/.bash_history,但由HISTFILE控制)。 换句话说,命令被添加到 HISTFILE 直到达到 $HISTFILESIZE 行,在该点,每个后续行添加意味着文件的第一个命令将被删除。

你可以在你的~/.profile(或者~/.bash_profile,如果该文件存在的话)中设置这些变量的值。 首先不要将它们设置在你的~/.bashrc 中,因为它们没有设置在那里,其次因为这会导致你有不同的 登录与非登录 shell 中的行为可能导致 其他问题

允许您微调历史行为的其他有用变量是:

  • HISTIGNORE : 这允许您忽略某些很少感兴趣的常见命令。 例如,您可以设置:

    export HISTIGNORE="pwd:df:du"
    

    这将导致任何以 pwddfdu 开头的命令被忽略并且不会保存在您的历史记录中。

  • HISTCONTROL : 这个让你选择历史的运作方式。 就我个人而言,我将其设置为“HISTCONTROL=ignoredups”,这会导致它只保存一次重复的命令。 其他选项是 ignorespace 忽略以空格开头的命令,以及 erasedups 导致在保存该行之前从历史列表中删除与当前行匹配的所有先前行。 ignoreboth 是 ignorespace 和 ignoreups 的简写。

  • HISTTIMEFORMAT : 这允许您设置历史文件的时间格式(这个还是挺有用的)。


为了进一步微调,您有:

  • histappend bash 选项。 这可以通过运行 shopt -s histappend 或将该命令添加到您的 ~/.bashrc 来设置。 如果设置了此选项

    当 shell 退出时,历史列表会附加到由 HISTFILE 变量的值命名的文件中,而不是覆盖该文件。

    这非常有用,因为它允许您组合不同会话的历史记录(例如考虑不同的终端)。

  • history 命令有两个有用的选项:

    • history -a : 使最后一条命令自动写入历史文件
    • history -r : 将历史文件导入当前会话

例如,您可以将这两个命令添加到您的 PROMPT_COMMAND 中(每次您的 shell 显示提示时都会执行此命令,因此每当您启动一个新的 shell 并在您在其中运行的每个命令之后):

export PROMPT_COMMAND='history -a;history -r;'

结合起来,它们确保您打开的任何新终端将立即导入任何其他 shell 会话的历史记录。 结果是所有终端/shell会话的共同历史。

Linux,可以通过配置bash shell的历史命令来自定义history的行为。以下是一些常见的history配置选项: 1. HISTSIZE: 这个环境变量用于指定history列表保存的命令数量,默认是500条。你可以通过在.bashrc文件添加以下行来修改它: ``` export HISTSIZE=<number> ``` 其`<number>`是你想要保存的命令数量。 2. HISTFILESIZE: 这个环境变量用于指定保存到磁盘上的历史命令的最大数量,默认是500条。你可以通过在.bashrc文件添加以下行来修改它: ``` export HISTFILESIZE=<number> ``` 其`<number>`是你想要保存到磁盘上的历史命令的最大数量。 3. HISTCONTROL: 这个环境变量用于控制哪些命令会被保存到history列表。常用的选项有: - `ignoredups`: 不将重复的命令添加到history列表。 - `ignoreboth`: 同时忽略以空格开头的命令和重复的命令。 - `erasedups`: 在history列表删除重复的命令。 你可以通过在.bashrc文件添加以下行来设置HISTCONTROL变量: ``` export HISTCONTROL=ignoredups ``` 4. HISTTIMEFORMAT: 这个环境变量用于指定在history列表显示的时间格式。默认情况下,history列表不显示时间。你可以通过在.bashrc文件添加以下行来设置HISTTIMEFORMAT变量: ``` export HISTTIMEFORMAT="%F %T " ``` 其`%F`表示日期(YYYY-MM-DD),`%T`表示时间(HH:MM:SS)。 以上只是一些常见的history配置选项,你可以根据自己的需要进行配置和修改。记得在修改完成后重新加载.bashrc文件或者重新启动终端使配置生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Honyelchak

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值