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

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

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

我想从历史记录中删除其中一个条目,但如果不在~/.bash_history中,我该如何删除它?


.bash_history 文件在哪里? - George Udosen
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并删除那个有问题的行。在此之前,你应该关闭所有终端并使用图形界面编辑器,或者确保你同时从文件和会话列表中删除该条目。
要了解更多关于history命令的信息,请输入help history。 有关Bash及其历史管理的更多信息,请阅读man bash的相关部分。