从 ~/.bash_history 中删除历史记录

从 ~/.bash_history 中删除历史记录

我对存储在中的终端或命令行历史记录有几个疑问~/.bash_history

  1. 我可以使用命令在终端中看到该文件history,但如果我尝试使用命令打开它,则gedit bash_history文件完全是空的。为什么?

  2. 我找到了如何使用以下代码行从终端删除文件中的一定数量的行:

    for i in {1..N}; do history -d N; done
    

    其中 N 是您要删除的行数(或命令数),但现在历史文件显示了最后一条命令,如果您试图覆盖您的内容,那么这不是很聪明的做法。所以问题是:我如何给出最后一条代码行并确保它不会被记录下来?

答案1

  1. 你只是忘记了前面的点,打开(bash)终端历史文件的命令是

    gedit ~/.bash_history
    

    此文件仅当您关闭一个终端。

  2. 要删除最后一个10来自此文件的行并且不记录此命令本身,打开一个新终端并执行以下命令链:

    sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit
    

    或者

    for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit
    

    或者

    head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit
    

    sedhead分别从中删除选定的行~/.bash_historyhistory -c清除终端的历史记录并将exit其关闭。

答案2

bash_history 文件是一个隐藏文件,以点开头。你需要执行

gedit ~/.bash_history

这将在 gedit 中打开该文件。

答案3

如果你只想删除命令日志的某些部分那么上述方法就很好了。如果你想停止特定 bash 会话的命令记录,那么发出命令

unset HISTFILE

更激烈的是,如果你不希望你的任何命令被记录,然后你可以做

rm ~/.bash_history
ln -s /dev/null ~/.bash_history

请注意,第一种方法仅对单个会话有效,而第二种方法将停止所有未来会话的命令记录。

答案4

1) 运行sh;这将生成 ash 的子 shell,它根本不记录历史记录。从那里编辑

2)将该行添加HISTCONTROL=ignoreboth.bashrc,并执行exec bash以用重新初始化的 shell 永久替换当前 shell,然后执行所有您不想以前导空格记录的命令。

相关内容