在这个简短的指南中,我们将学习如何避免在 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 "export HISTFILE=~/.custom_file" >>~/.bashrc
在上述命令中将“~/.custom_file”替换为您自己的。
运行以下命令以应用更改:
$ source ~/.bashrc
现在让我们看看如何避免在 ~/.bash_history 文件。
在 Linux 中避免 Bash 历史记录中的重复条目
我们使用“历史”命令检索最后执行的命令。 看看以下 example:
$ 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
在末尾添加以下行:
export HISTCONTROL=ignoredups
Save 和 close 文件。 在这里,我们在 HISTCONTROL 变量前加上“export”。 这意味着该变量可用于所有子流程。 更多细节, 这里.
或者,使用以下单线:
$ echo "export HISTCONTROL=ignoredups" >>~/.bashrc
现在运行以下命令以使更改生效:
$ source ~/.bashrc
或者,注销并重新登录以应用更改。
从现在开始,重复的条目将不会被记录。 您可以通过多次运行相同的命令来验证它,并使用以下命令查看历史列表:
$ history
您还可以使用冒号分隔的 HISTCONTROL 变量设置多个值,如下所示:
export HISTCONTROL=ignoredups:erasedups
有关更多详细信息,请参阅 Bash 手册页:
$ man bash
相关阅读:
- 如何在 Linux 中清除命令行历史记录
- 如何在 Linux 中从 Bash 历史记录中清除特定命令
- 如何在没有行号的情况下显示 Bash 历史记录
感谢您的光临!
帮助我们帮助您:
- 订阅我们的电子邮件通讯: 立即注册
- 支持 OSTechNix: 通过贝宝捐款
- 下载免费的电子书和视频: TradePub 上的 OSTechNix
- 联系我们: 红迪网 | Facebook | Twitter | 领英 | RSS订阅
祝你有美好的一天!!