如何避免Linux中的Bash历史记录中的重复条目
在本简要教程中,我们将学习如何在Linux中避免Bash历史记录中的重复条目。
从命令行工作时,我们可能多次运行一些Linux命令。
如我们所知,我们在终端中运行的每个命令都保存在历史记录文件中。
因此,一遍又一遍地执行相同的命令将填满历史文件。
迟早,我们将最终在历史文件中有太多重复条目。
默认情况下,500个命令条目存储在历史记录文件中。
在最近的Ubuntu系统中,文件大小为1000.一旦命令条目的数量越过默认限制,就会从历史记录列表中删除最旧的条目。
因此,我们无法检索旧条目。
当然,我们可以增加历史文件大小,并根据需要保存尽可能多的条目。
但是,代替增加历史文件大小,避免在历史文件中保存重复项会更好。
查找历史文件位置
命令历史记录是按用户存储的特定于shell 的功能。
根据我们使用的shell,历史文件保存在特定文件中。
在使用BASH的Linux系统中,默认情况下,命令保存在~/.bash_history文件中。
我们可以通过运行以下命令查看shell历史文件的位置:
$echo $HISTFILE
其中histfile是一个变量,用于定义保存命令历史记录的文件的名称。
来自My Ubuntu Desktop的示例输出:
/home/sk/.bash_history
在CentOS 8中,我收到以下输出:
/root/.bash_history
更改历史文件位置
如果要更改默认位置,请运行:
$echo "export HISTFILE=~/.custom_file" >>~/.bashrc
在上面的命令中替换"~/.custom_file"。
运行以下命令使更改生效:
$source ~/.bashrc
现在让我们了解如何在~/.bash_history文件中避免多次保存相同的命令。
避免在Linux中的Bash历史记录中的重复条目
我们使用"历史记录"命令检索上次执行的命令。
看看以下示例:
$history | grep ls
示例输出:
8 lsb_release -a 13 ls -l 14 lsb_release -a 17 ls -l 20 ls -l 23 lsb_release -a 27 ls 29 lsb_release -a 32 ls 36 ls 42 ls 44 lsb_release -a 62 history | grep ls
正如我们在上面的输出中看到的,"LS"命令已多次录制。
我们可以使用HistControl变量来控制这些重复项。
HistControl可以具有以下值:
- IgnorEspace - 以空格开头的行不会在历史记录中保存。
- 忽略 - 不会保存匹配先前历史记录条目的行。换句话说,忽略重复项。
- Ignoreboth - 它是"IgnoreSpace"和"Ignoredups"值的简写。如果将这两个值设置为histControl变量,则不会保存以空格和重复项开头的行。
- 替代 - 消除整个历史上的重复。
因此,为了避免Linux中的Bash历史记录中的重复条目,请编辑~/.bashrc文件:
$nano ~/.bashrc
最后添加以下行:
export HISTCONTROL=ignoredups
保存并关闭文件。
其中我们将HistControl变量前缀为"Export"。
它意味着所有子进程都可以使用变量。
或者,使用以下单行:
$echo "export HISTCONTROL=ignoredups" >>~/.bashrc
现在运行以下命令以生效更改:
$source ~/.bashrc
或者,注销并重新登录使更改生效。
从现在开始,将无法记录重复的条目。
我们可以通过多次运行相同的命令来验证它,并使用以下命令查看历史列表:
$history
我们还可以将多个值设置为HistControl变量,其中包含以下冒号分隔:
export HISTCONTROL=ignoredups:erasedups