如何删除 bash 历史记录中的最后 5 行?

Ant*_*nto 14 command-line bash 14.04 bash-history

如何删除 bash 历史记录中的最后 5 行?所以当我重新加载 Ubuntu 服务器或重新启动它时,它们根本就不存在?

history -c 只从当前会话中删除它,但是当我重新登录时,我再次看到命令,我想清除最后 5 个。

我跑了:

history
Run Code Online (Sandbox Code Playgroud)

然后我会看到命令的编号,例如:

  489  cd ..
  490  cd .zshrc
  491  cat .zshrc
Run Code Online (Sandbox Code Playgroud)

然后我运行例如:

history -d 489
history -c 
Run Code Online (Sandbox Code Playgroud)

然后我关闭终端并重新打开它,我仍然看到第 489 行它只在当前会话中被删除,我如何从所有会话中永久删除它?

请指教。

EOD*_*aff 14

您可以通过两个步骤使用命令行从历史文件中删除:

键入history -d <line_number>会从内存中的历史记录中删除指定的行。键入history -w会将当前内存中的历史记录写入 ~/.bash_history 文件。这两个步骤一起从内存历史记录和 .bash_history 文件中永久删除该行。

参考:StackExchange


Rav*_*ina 9

有不同的方法可以完成这项任务,但在进一步讨论之前让我们先澄清一些事情。

有一个名为: 的文件~/.bash_history,其中包含您旧的终端会话历史记录,每当您关闭终端时,您的历史记录都会保存在那里。

同时,您的旧会话和当前会话的历史记录可以通过history命令临时访问,直到您关闭终端,然后终端才会保存到~/.bash_history文件中。

因此,如果您在 末尾删除 5 行~/.bash_history,则关闭终端将导致您当前的命令可以在下一个会话中访问。

所以如果我wc在 .bash_history 上做一个:

wc -l ~/.bash_history
Run Code Online (Sandbox Code Playgroud)

大多数情况下,我会得到比history | wc -l.

如果要删除文件的最后 5 行,可以使用以下命令:

for i in {1..5}; do sed -i '$d' .bash_history; done;
Run Code Online (Sandbox Code Playgroud)

如果要保留当前会话运行中发出的最后 5 个命令以外的所有历史记录:

history | awk '{ print $2 }' | head -n -5 > .bash_history
Run Code Online (Sandbox Code Playgroud)

也不要忘记跑步history -c


小智 9

我认为你需要试试这个,它非常容易和简单。

  1. 如何删除历史记录不留痕迹

    history -d $((HISTCMD-1)) && history -d NO_of_History_you_want_to_delete
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果你想执行一个命令而不留下任何痕迹。

    history -d $((HISTCMD-1)) && type_your_command_here_and_execute
    
    Run Code Online (Sandbox Code Playgroud)

  • @theking2 对于某些系统,前面加一个空格会告诉 bash 不要将命令写入历史记录 [/sf/ask/453286711/](/sf/ask/453286711/)。 (4认同)