删除 Linux 上最近 n 条命令的历史记录


在 Linux 中,命令历史记录是先前执行命令的记录。命令历史记录存储在一个名为 .bash_history 的文件中,该文件位于每个用户的 home 目录中。history 命令可用于查看命令历史记录,并且 history 命令也可与其他命令(如 grep)一起使用,以搜索历史记录中的特定命令。历史记录中的命令分配了一个编号,可用于通过在前面加上感叹号 (!) 来快速执行先前命令。例如,输入“!123”将执行历史记录中编号为 123 的命令。

还有一些选项可以更改命令历史记录的行为。

  • history 命令可以与 -c 选项一起使用以清除命令历史记录。

  • HISTFILE 环境变量可用于指定用于存储命令历史记录的不同文件。

  • HISTSIZE 和 HISTFILESIZE 环境变量可分别用于指定历史记录中存储的最大命令数和历史记录文件的最大大小。

  • HISTIGNORE 变量可用于忽略历史记录中的特定命令或命令模式。

  • set -o history 启用默认情况下禁用的 shell 的命令历史记录。

history 命令和 .bash_history 文件中的命令之间的区别

history 命令是 Bash(大多数 Linux 系统上的默认 shell)中的内置命令,允许您查看在当前 shell 会话中执行的命令。当您运行 history 命令时,它将显示已执行命令的列表,最近的命令位于列表的顶部。每个命令都分配了一个编号,可用于通过在前面加上感叹号 (!) 来快速执行先前命令。例如,输入“!123”将执行历史记录中编号为 123 的命令。

.bash_history 文件另一方面,是一个纯文本文件,用于存储特定用户的命令历史记录。该文件位于用户的 home 目录中,并在 shell 中每次执行命令时更新。可以使用文本编辑器查看 .bash_history 文件的内容,并且可以通过复制和粘贴到 shell 中来执行命令。

从 .bash_history 删除最后 n 行

您可以使用 sed 命令从 .bash_history 文件中删除最后 n 行,sed 命令是一个用于编辑文本文件的命令行实用程序。从 .bash_history 文件中删除最后 n 行的基本语法为:

sed -i -e :a -e '$d;N;2,N;ba' -e 'P;D' ~/.bash_history

此命令将删除文件的最后一行。要删除最后 n 行,可以使用以下命令:

sed -i -e :a -e "1,${n}d" ~/.bash_history

这里,n 是您要从 .bash_history 文件中删除的最后几行的数量。此命令将从 .bash_history 文件中删除最后 n 行。

请记住,此命令将直接更改 .bash_history 文件,并且更改将立即生效。此外,这些更改是不可逆的,因此,如果您不确定操作,建议在进行任何修改之前备份文件。

还值得一提的是,这只会从历史记录文件中删除命令,而不会从当前会话历史记录中删除命令,因此您仍然可以使用“history”命令查看它们,但它们不会保存在将来的会话中。

删除历史记录中的最后 n 行

要删除当前 shell 会话历史记录中的最后 n 行,可以使用 history 命令,后跟 -d 选项,然后是您要删除的命令的行号。

例如,要从历史记录中删除最后 3 条命令,可以使用以下命令:

history -d $(($(history | tail -n1 | awk '{print $1}')-3)) $(($(history | tail -n1 | awk '{print $1}')-1))

此命令将从当前历史记录中删除最后 3 条命令,包括用于获取最后一条命令编号的“history”命令和用于提取它的“awk”命令。

您还可以通过指定起始和结束行号来删除一系列命令。例如,要删除命令 10 到 15,可以使用以下命令:

history -d 10 15

请记住,这只会从当前会话历史记录中删除命令,并且不会影响 .bash_history 文件或任何其他会话历史记录。此外,这些更改是不可逆的,因此,如果您不确定操作,建议在进行任何修改之前备份历史记录。

Bash 5 以来历史记录中的更改

2019 年 1 月发布的 Bash 5 版本中的历史记录功能相较于先前版本引入了多项更改和改进。一些最显著的更改包括:

  • 时间戳 - Bash 5 现在在命令历史记录中包含时间戳,允许您查看每个命令执行的时间。可以通过将 HISTTIMEFORMAT 变量设置为指定时间戳格式的值来启用此功能。

  • 追加到历史记录文件 - 在先前版本的 Bash 中,每次执行新命令时都会覆盖历史记录文件。使用 Bash 5,历史记录文件现在被追加,这意味着先前会话的历史记录不会丢失。

  • Histignore - 新变量 HISTIGNORE 允许您忽略将特定命令或命令模式添加到历史记录文件。

  • Largefile - Bash 5 现在支持大型历史记录文件,允许历史记录文件的大小超过先前版本中 32,768 条命令的限制。

  • 增量搜索 - Bash 5 包括历史记录的增量搜索功能,允许您通过键入命令的一部分并按向上箭头来搜索命令。

HISTSIZE 和 HISTFILESIZE 现在可以具有无限值,这意味着分别对历史记录中存储的命令数量和历史记录文件的最大大小没有限制。

总的来说,这些新功能使管理和搜索命令历史记录变得更加容易,并且使使用长历史记录文件更加方便,这在您必须使用持续时间长的会话时特别有用。

结论

Linux 中的历史记录功能是一个强大的工具,允许您轻松查看和执行以前的命令,以及根据需要从历史记录中删除特定命令。.bash_history 文件存储特定用户的命令历史记录,跨多个 shell 会话,可以使用 sed 等命令行工具进行编辑。history 命令允许您查看在当前 shell 会话中执行的命令,并从当前会话历史记录中删除特定命令。

更新于: 2023 年 1 月 24 日

11K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告