web-dev-qa-db-ja.com

なぜbash履歴を削除するだけでは不十分なのですか?

以前はbash履歴を削除するだけでbash履歴をクリアできると思っていましたが、昨日、猫がキーボードの右側をめちゃくちゃにしていて、コンピューターに戻ったときに、1か月前に入力したものを見つけたので、クレイジーなようにすべてのキーを押して、トリガーした原因を探します。 UPARROWキーが.bash_historyを削除した後でも私のbash履歴を表示することが判明しました。

どうすれば実際のbash履歴を削除できますか?

15
bunden

一部のケース(一部のbashバージョン)では、次のことを行います。

$ history -c; history -w

または単に

$ history -cw

メモリ内の履歴をクリアし(上矢印と下矢印には一覧表示するコマンドがありません)、次に$HISTFILEファイルにthatを書き込みます($HISTFILEが実行中のbashによって切り捨てられた場合)インスタンス)。

histappendオプションが未設定で$HISTFILEが0に設定されている場合でも、bashがnotを選択して$HISFILEZIZEファイルを切り捨てることがあります。

このような場合、nukeオプションは常に機能します。

history -c; >$HISTFILE

これにより、メモリに記録されたコマンドと以前にファイルに記録されたすべてのコマンドの履歴リストがクリアされます。これにより、実行中のシェルのメモリまたはディスクに履歴が記録されなくなりますが、他の実行中のbash(履歴がアクティブなインスタンス)には、bashが開始されたときに$HISTFILEから読み取られたコマンドの完全なコピーがある場合があります(またはhistory -rが実行されたとき)。

alsoである場合、現在のセッションの他の何も(新しいコマンドなし)が履歴ファイルに書き込まれる必要がない場合、unset HISTFILEはそのようなロギングを防止します。

26
Isaac

bashは、メモリにセッション履歴があり、HISTFILEの終了時にシェル変数bashがファイル名に設定されている場合、ファイルに書き込まれます。

HISTFILEが指すファイルを削除し、その変数を設定解除してbashを終了すると、そのシェルセッションは永続的な履歴を残しません。

HISTFILE変数の設定を解除せずにファイルを削除すると、永続的な履歴が空になるだけですが、現在のセッションの履歴はシェルの終了時に保存されます。

9
Kusalananda