如何在Linux/Ubuntu终端或Bash中永久清除所有历史记录?

170
当您在Linux终端中使用向上箭头键时,可以再次使用以前的命令。这是一个很好的功能。但是,我开始记录带有敏感详细信息的mysql登录命令到mysql历史记录中。

我如何永久删除该历史记录?

抱歉,我完全忘记提到我正在使用bash。 - Frank Vilea
16
由于此问题已关闭,我无法将其作为答案添加。您可以使用以下命令告诉bash不要保存特定会话的任何历史记录:export HISTFILE=/dev/null - Chris Eberle
1
我还可以补充一点:不要在命令行中输入敏感信息 - 等待提示符:D - hummingBird
2个回答

346
你可以像这样清除bash历史记录:

history -cw


4
很喜欢这个答案——它立即生效,而不是删除.bash_history需要重新启动shell才能生效。 - mikemaccana
1
无法在我的Ubuntu 14.04机器上工作。历史记录只会出现在新终端中。唯一有效的是>〜/bash_history。不过必须重新启动终端才行。 - Aniket Thakur
也适用于Mac OS X El Capitan(在版本10.11.2上进行了测试),但您必须将以下行添加到〜/ .bash_profile中:export SHELL_SESSION_HISTORY = 0,然后执行source〜/ .bash_profile,最后退出并重新启动终端应用程序。如果您想了解此导出命令的作用,则绝对应该查看以下链接:http://superuser.com/questions/950403/bash-history-not-preserved-between-terminal-sessions-on-mac - King-Wizard
1
只用-c不就行了吗?手册上说,-c通过删除所有条目来清除历史记录列表。-w将当前历史记录写入历史文件并将其附加到历史记录列表中。只用-c就可以了。 - Kahn

26
如果您使用bash,那么终端历史记录会保存在名为.bash_history的文件中。删除它,历史记录将消失。
但是,对于MySQL来说,更好的方法不是在命令行中输入密码。如果只指定-p选项而不提供值,则会提示您输入密码,并且密码不会被记录。
另一种选择是,如果您不想每次都输入密码,可以将其存储在my.cnf文件中。创建一个名为~/.my.cnf的文件,并添加以下内容:
[client]
user = <username>
password = <password>

确保更改文件权限,以便只有您可以读取该文件。

当然,这样您的密码仍保存在明文文件中,就像以前保存在.bash_history中一样。


4
这是解决这个问题的完全正确方法。 - andyb
2
实际上,在我的Linux系统中,Bash会记住历史记录并在注销时重新创建文件。您需要登录,删除文件,再次登录,注销第一个shell,删除文件,然后注销第二个shell。 - cHao
谢谢指出这一点。我以为直接在命令中使用“-p+密码”选项很聪明,因为只需按上箭头就可以快速输入我的非常长的密码。现在是重新考虑的时候了... - Frank Vilea
6
别忘了执行unset HISTFILE命令,这样就不会保存当前历史记录了。 - Ignacio Vazquez-Abrams
我编辑了我的答案,并添加了一个解决方案,可以防止每次输入密码。 - sagi
如果您正在使用mysql 5.6,则更好的方法是使用mysql_config_editor,它使用加密配置文件.mylogin.cnf而不是明文.my.cnf 链接 - PerroVerd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接