如何彻底清除bash历史记录?


254

我想清除服务器历史记录中的所有先前命令。我曾经使用过history -c,似乎所有内容都已清除,但是当我SSH到服务器时,所有命令仍然存在。

如何永久清除它们?

Answers:


332

该文件~/.bash_history保存历史记录。

要完全清除服务器上的bash历史记录,请打开终端并输入

cat /dev/null > ~/.bash_history

其他替代方法是链接~/.bash_history/dev/null

然而,

一个烦人的副作用是,历史记录条目在内存中有一个副本,当您注销时,它将刷新回到文件中

要解决此问题,请使用以下命令(对我有用):

cat /dev/null > ~/.bash_history && history -c && exit

17
您也可以在.bashrc和.bash_logout中放置上述命令。登录时的含义是什么,您将拥有清晰的历史记录;注销时,您的历史记录将被清除
Qasim 2012年

26
为什么在那里需要/ dev / null?还> ~/.bash_hstory不够吗?
配置器

4
是的,那就足够了!
fromnaboo

3
通过SSH连接时,我尝试在覆盆子盒子上进行此操作。我按照@Qasim的建议将上述命令(cat / dev / null>〜/ .bash_history && history -c && exit)添加到.bashrc和.bash_logout中。现在,只要我通过SSH连接,远程主机就会关闭连接(在打印motd之后)。帮助:/
高级

14
演示当您盲目地做事情而没有正确阅读并且不了解处理和数据流时会发生什么。这也显示了不良沟通的陷阱。devav2所做的只是运行了一次,而Qasim应该写的是删除退出命令,然后再将其添加到登录脚本中。
斯里兰卡

141

该怎么办:

每个打开的bash shell中(您可能有多个打开的终端):

history -c
history -w

原因:如上所述,history -c清空文件~/.bash_history。重要的是要注意,bash shell不会立即将历史记录刷新到bash_history文件。因此,重要的是(1)在所有终端中将历史记录刷新到文件,以及(2)清除历史记录。这就是上面的命令所做的。

参考:http : //www.giannistsakiris.com/index.php/2007/09/13/how-to-clear-bash-history-and-what-to-watch-out-for/


3
实际上,另一种方法对我有用。
kristianp 2014年

24
在许多情况下,您可以将这两个命令组合在一起:history -cw
Elliot

2
由于某些原因,这在Ubuntu 14.04上可能不起作用,可能是其他原因。应该,但不是。如果发出命令“ history -cw”,则可以使用向上箭头确认历史记录不再存在,但是如果您通过shift +单击终端图标(我有它)来启动另一个终端窗口(在Unity桌面中)固定在启动程序中),无论执行“ history -cw”多少次,命令历史记录都将返回。“ cat / dev / null>〜/ .bash_history”是对我有效的唯一方法。
Hatoru Hansou 2014年

虽然我不是Ubantu,但可以在OSX中正常使用bash shell。
Scott Biggs

3
是历史记录-c,然后是历史记录-w,您首先要清除历史记录,然后写入更改。通过关闭终端并再次打开终端,可以很容易地确认这一点,首先使用-w命令再次存在,使用-w最后的历史记录将被有效清除。
Hatoru Hansou 2015年

56

执行以下命令以永久清除历史记录

history -c && history -w

祝好运!


3
比接受的答案好得多。;)
Chiramisu

如果它解释了这些标志的作用(以及为什么/何时使用它们是正确的命令),那么该答案将更加有用。
LarsH 16:37

20

还有一个更简单的方法:history -c在终端提示符下运行,bash_history文件中的所有条目都消失了。


不它不是。注销,登录,向上箭头提供了我所有的信息。您还需要“ history -w”。
stolsvik

1
如果您阅读了OP的问题,您会知道使用history -c是导致此问题的确切方法。
J.Money

10

另一种方法是~/.bash_history使用rm ~/.bash_history命令删除文件。再次登录时,.bash_history将自动创建文件。


4
至少在某些操作系统上,注销时〜/ .bash_history会写入磁盘-不确定* buntus。
d -_- b

7

清除当前shell的历史记录:

history -c

注销时,当前外壳程序的历史记录会附加到〜/ .bash_history(这是以前外壳程序历史记录的高速缓存)的最大数量(请参见“ man bash”中的HISTFILESIZE)。

如果要完全删除历史记录,则基本上必须清空〜/ .bash_history,上面的许多条目都建议这样做。如:

history -c && history -w

这将清除当前shell的历史记录,然后强制当前shell的历史记录(空)覆盖〜/ .bash_history ....或更准确地说,它会强制其覆盖HISTFILE(默认为〜/ .bash_history)。

希望这可以帮助。


4
您的回答是正确的,但是问题已经有两年了,已经接受了答案,并且包含与您给出的相同的答案。
查尔斯·格林

6
rm ~/.bash_history; history -c; logout

现在重新登录并见证您的向上箭头没有提供任何帮助。


1
@KasiyA这是关于服务器和ssh会话的,因此无需进行编辑……
RaduRădeanu2014年

0

试试这个

编辑您.profile的文件,并在文件末尾添加以下行

rm -f .bash_history

这样,每次登录时,它将自动为您删除.bash_history文件。添加-r递归删除选项似乎很危险,不需要。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.