web-dev-qa-db-ja.com

〜/ .bash_historyから履歴を削除する

~/.bash_historyに保存されている端末またはコマンドラインの履歴についていくつか質問があります。

  1. historyコマンドで端末にファイルを表示できますが、gedit bash_historyでファイルを開こうとすると、ファイルは完全に空になります。どうして?

  2. このコード行を使用して、ターミナルからファイル内の特定の行数を削除する方法を見つけました。

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

    ここで、Nは削除する行(またはコマンド)の数ですが、履歴ファイルにこの最後のコマンドが表示されるようになりました。質問は次のとおりです。最後のコード行を指定して、これが記録されないようにするにはどうすればよいですか?

8
IDK
  1. 直前のドットを忘れた場合、(bash)ターミナル履歴ファイルを開くコマンドは

    gedit ~/.bash_history
    

    このファイルは、close端末の場合にのみ更新されます。

  2. このファイルから最後の1行を削除し、このコマンド自体を記録しないようにするには、新しいターミナルを開き、次の一連のコマンドを実行します。

    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
    

    sedまたはheadは、選択された行をそれぞれ~/.bash_historyhistory -cから削除し、端末の履歴をクリアし、exitを閉じます。

18
dessert

Bash_historyファイルは、ドットで始まる隠しファイルです。あなたがする必要があります

gedit ~/.bash_history

これにより、geditでファイルが開きます。

4
user732773

コマンドログの特定の部分のみを削除する場合は、上記の方法で十分です。特定のbashセッションのコマンドロギングを停止する場合は、コマンドを発行します

unset HISTFILE

もっと抜本的にするには、コマンドをログに記録したくないの場合、次のようにできます。

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

最初の方法は単一のセッションでのみ有効であり、2番目の方法は将来のすべてのセッションでコマンドロギングを停止することに注意してください。

1

これにはすでに受け入れられた答えがありますが、80年代からこれをやっています。トラックを隠すのに最適な方法であり、マルチフェーズのアプローチです。ほとんどの場合、注意を払っていない限り気付かないものです。以下にその方法を示します。

ターミナル/シェル/セッションを開き、以下を実行します。

 chmod 444 ~/.bash_history

シェルを終了し、ターミナル/シェル/セッションを開いて、次の操作を行います。ここに、履歴を完全に消去するための創造的な方法を示します。

1:

 vi ~/.bash_history
 9999999 dd
 <esc>wq!

2 (create a fake history)

 Sudo echo "which ls" > ~/.bash_history
 Sudo echo "cd ~/;ls" >> ~/.bash_history

その後、適切な測定のために:

 chmod 444 ~/.bash_history

シェルを終了します

新しいシェルを開いて入力します

 history

目立たないのは、ls -ratlを実行すると、〜/ .bash_historyがディレクトリリストのガラガラに消えてしまうことです。不要な注意を引くリンクとしては表示されません。ほとんどの人は、ルートで-aを実行しません。これは、エミュレーションが必要な場合に便利です。

このアプローチの欠点は、戻って履歴を取得する能力を失うことです。実際の〜/ .bash_historyファイルは、ディレクトリリストの最上部にも表示される可能性があります。これは、時間が経つにつれて非常に古い変更日になる可能性があり、それ自体が何かが間違っていることを発見する可能性があるためです.

1
Div

シェルからログアウトするまで、履歴は保存されません。シェルからログアウトしてから、再度.bash_historyを確認してください。コマンド履歴がそこにあるはずです。

1)sh;を実行しますこれにより、灰のサブシェルが生成され、履歴がまったく記録されません。そこから編集

2)行HISTCONTROL=ignoreboth.bashrcに追加し、exec bashを実行して現在のシェルを再初期化されたシェルに永続的に置き換え、ログに記録したくないすべてのコマンドを先行スペースで実行します。

0
Joshua

私はまだコメントできないので、答えとして私のコメントを追加します:

man historyはすべてに答えます。

#1の答えは、履歴がメモリ上にあるということです。 history -aは、すぐにファイルに保存します。 history -wも保存しますが、他のセッションを台無しにする可能性があります。

回答#2:history -a、gedit、必要な行を削除、history -r

0
gcb