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

linuxopen sourceoperating system更新于 2026/1/25 9:07:17

在 Linux 中,命令历史记录是先前执行的命令的记录。命令历史记录存储在一个名为 .bash_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 文件是一个纯文本文件,用于存储特定用户的命令历史记录。该文件位于用户的主目录中,每次在 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 文件中删除的最后 n 行。此命令将从 .bash_history 文件中删除最后 n 行。

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

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

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

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

例如,要从历史记录中删除最后 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 现在可以设置为 unlimited,分别表示对存储在历史记录中的命令数量和历史文件的最大大小没有限制。

总的来说,这些新功能使管理和搜索命令变得更加容易。历史记录,使处理长历史文件更加便捷,这在处理长时间会话时尤其有用。

结论

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


相关文章


有用资源