为什么历史记录和 .bash_history 不同以及如何删除历史记录中的条目?

为什么历史记录和 .bash_history 不同以及如何删除历史记录中的条目?

所以我知道~/.bash_history应该是存储所有历史记录的文件,您只需输入即可history查看该文件的所有内容。

为什么我的.bash_history文件只有 5 个条目却history显示 135 个结果?

我想从历史记录中删除我看到的某个条目,但如果不想删除,该~/.bash_history如何删除它?

答案1

这里有一个小误会,history是吗不是显示 的内容~/.bash_history。相反,它显示 Bash 的历史列表以此来纪念这次会议。

假设 Bash 和 Ubuntu 的默认设置,历史管理的工作方式如下:

  • 每当您打开 Bash shell 时,它都会读取您的文件内容.bash_history并将其附加到其会话历史记录列表中。

  • 您输入命令,导致 Bash 将它们附加到其会话历史记录列表中。

  • 当您再次关闭 shell 时,Bash 会通过将包含的条目附加到文件来将其历史记录列表保存到磁盘.bash_history

注意:默认情况下,历史列表最多会被截断为 1000 个条目,历史文件最多会被截断为 2000 个条目。

你看,历史文件在特定 shell 会话结束之前永远不会更新,所以你在当前终端窗口中所做的一切都不会保存到磁盘上。它只驻留在内存中的历史列表中。


要从历史列表中清除特定条目,您可以运行history以显示完整列表并找出有问题的条目的索引号。然后您可以使用

history -d NUMBER

您也可以使用 简单地擦除完整的会话历史记录列表history -c

请注意,如果条目已写入历史记录列表中,则从历史记录列表中删除条目不会自动将其删除.bash_history,但是如果您打开了任何 Bash 会话,则从文件中删除条目也不会将其从当前会话历史记录列表中删除。

要从历史文件中删除条目,请~/.bash_history在文本编辑器中打开并删除其中有问题的行。您应该在此之前关闭所有终端并使用 GUI 编辑器,或者确保从文件和会话列表中删除该条目。

有关该history命令的更多信息,请键入help history
有关 Bash 及其历史记录管理的更多信息,请阅读 的相关部分man bash

答案2

编辑 ~/.bash_history 文件的另一种方法是运行:

$ history -d ### && history -w

这将从内存中删除该行,然后将内存中更新的历史记录写入 ~/.bash_history 文件。

相关内容