在这个简短的指南中,我们将学习如何避免 Linux 中 Bash 历史记录中的重复条目。 从命令行工作时,您可能多次运行某些 Linux 命令。 如您所知,我们在终端中运行的每个命令都保存在历史文件中。 所以一遍又一遍地执行相同的命令会填满历史文件。 迟早,您最终会在历史文件中出现过多的重复条目。
默认情况下,历史文件中存储了 500 个命令条目。 在最近的 Ubuntu 系统中,文件大小为 1000。一旦命令条目的数量超过默认限制,最旧的条目将从历史列表中删除。 因此,您无法检索旧条目。 当然,您可以增加历史文件的大小并根据需要保存尽可能多的条目。 但是,与其增加历史文件大小,不如避免在历史文件中保存重复项。
内容
查找历史文件位置
命令历史是基于每个用户存储的特定于 shell 的功能。 根据您使用的 SHELL,历史文件保存在特定文件中。 在使用 Bash 的 Linux 系统中,命令保存在 ~/.bash_history 默认文件。 您可以通过运行以下命令来检查 shell 历史文件的位置:
$ echo $HISTFILE
这里,HISTFILE 是一个变量,用于定义保存命令历史的文件的名称。
我的示例输出 Ubuntu 桌面:
/home/sk/.bash_history
在 CentOS 8,我得到以下输出:
/root/.bash_history
更改历史文件位置
如果要更改默认位置,请运行:
$ echo " HISTFILE=~/.custom_file" >>~/.bashrc
在上面的命令中用你自己的替换“~/.custom_file”。
运行以下命令以应用更改:
$ source ~/.bashrc
现在让我们看看如何避免多次保存相同的命令 ~/.bash_history 文件。
避免 Linux 中 Bash 历史记录中的重复条目
我们使用“history”命令检索最后执行的命令。 看看下面的例子:
$ 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 可以具有以下值:
- 忽略空间 – 以空格开头的行不会保存在历史记录中。
- 被忽略 – 与先前历史条目匹配的行将不会被保存。 换句话说,重复项被忽略。
- 忽略两者 – 它是“ignorespace”和“ignoredups”值的简写。 如果将这两个值设置为 HISTCONTROL 变量,则不会保存以空格开头的行和重复项。
- 删除 – 消除整个历史中的重复项。
因此,为了避免 Linux 中 Bash 历史记录中的重复条目,请编辑您的 ~/.bashrc 文件:
$ nano ~/.bashrc
在最后添加以下行:
HISTCONTROL=ignoredups