我正在开发一个客户端项目,该项目托管在 Ubuntu 服务器上的 Digital Ocean 上,我和其他几个开发人员一起开发,我是新手,编写了一堆命令,非常混乱。我如何删除某个点之前的命令历史记录?
例如,我想删除今天输入的所有命令,并保留之前的所有命令,这可能吗?
其他开发人员可以更轻松地找到以前的命令,而无需浏览我的所有命令。是否可以清除 bash_history 到某个时间点,例如仅清除今天的历史记录?如果可以,怎么做?
请指教!
谢谢!
答案1
Bash 历史记录中的行被保存为纯文本行,没有任何元信息(如调用时间戳)。因此,无法自动清除一天中的所有命令历史记录,因为您根本无法再分辨出哪个命令是在何时运行的。
如果您只是想删除当前 Bash 会话的整个命令历史记录(即仍然在内存中且尚未写入磁盘的所有内容),您可以清除内存历史记录缓冲区或将其替换为磁盘中旧历史记录文件的内容。
清除历史记录缓冲区将导致当前会话的内存历史记录为空,这意味着如果您按下↑等,将不会显示任何命令。一旦退出 Bash 会话,清除后输入的所有新命令都将附加到历史记录文件中,并且在下一个会话中,您将再次看到完整的历史记录,仅缺少上一个会话开始和清除命令之间的范围。
history -c
使用磁盘中的历史文件的内容替换当前内存中的历史缓冲区将具有与清除历史缓冲区相同的最终结果,只是在当前会话中您将可以访问旧的命令历史记录而不是空列表。
history -r
如果这对您没有帮助,因为您想整理以前会话或仅部分会话的条目,则您所需要的是外科手术方法:
将当前内存历史缓冲区同步到磁盘上的历史文件,然后在文本编辑器中打开该文件并手动删除所有有问题的条目。
要将当前会话的历史记录手动附加到历史记录文件(因为它仅在退出会话时自动发生),请先运行以下命令:
history -a
之后,~/.bash_history
在您最喜欢的文本编辑器中打开 Bash 历史文件(因为您在服务器上,我建议例如nano
)并根据您的喜好编辑命令列表。该文件按时间顺序列出所有记录的命令,最新命令排在最后。只需删除有问题的行并保存您的工作即可。
之后,您应该使用以下命令将修改后的历史记录重新加载到内存历史记录缓冲区中,以防止在退出会话时将内存中的旧条目附加到整理的历史记录文件中:
history -r
答案2
如果它有帮助:
您可以将时间戳添加到 ~/.bash_history
它在名为 HISTTIMEFORMAT 的环境变量中设置。此变量属于日期类型(请参阅 man date 了解如何格式化它)。
您可以通过将其添加到 .bashrc 末尾将其永久添加到用户级别
示例:
$ echo 'HISTTIMEFORMAT="%F %T "' >> ~/.bashrc
(此处的格式为 YYYY-MM-DD hh:mm:ss )。
输出现在将类似于:#history
您也可以将其添加到所有用户历史记录中,但我没有尝试过。显然,您可以通过在 /etc/profile 或等效文件(/etc/profile.d/ 中的文件)的末尾添加相同的内容来实现此目的。
我通过谷歌搜索找到了以上所有信息,并在这里找到了这些信息: https://www.2daygeek.com/display-date-time-linux-bash-history-command/ (但我与该网站没有任何联系,也不认识它的作者)
答案3
您可以使用以下方法删除历史记录:
history -d NNN
其中 nnn 是 3 位数字的行号。另请查看man history
您可以使用以下命令删除当前 shell 会话的历史记录:
history -c