bash履歴が予期せずクリアされる原因は何ですか?


16

今日、私のbash履歴が完全にクリアされていることに気付きました。ファイルを実行history -cも削除もしていません.bash_history.bash_historyファイルとを削除する以外に、history -cbash履歴をクリアするにはどうすればよいですか?


2
例えばによって起こったかもしれません>.bash_history。誰かがあなたのアカウントにいて、彼の痕跡を隠そうとしたかもしれません。異例のログイン時間をチェックしlast、スルー検索/var/log/auth.log(お使いのシステムによって異なります)。
ott--

回答:


17

複数のbashインスタンスを同時に閉じると、履歴がクリアされる可能性のある既知の競合状態があります。これは、bash履歴ファイルが書き込まれるときに使用されるロックがないために発生します。

Chet Ramey(現在のbashメンテナー)はこの問題の条件の良い要約を与えまし

現在の(bash-4.3-devel)コードは、エラー(lib / readline / histfile.c:history_do_write())がないと仮定して、次のように機能します。

  • 名前変更(histfile、histfile〜)
  • O_CREAT | O_TRUNCでファイルを開く
  • すべての履歴データを保持するのに十分な大きさのmallocバッファー
  • 1回のwrite(2)呼び出しですべての履歴エントリを書き込みます
  • ファイルを閉じる
  • リンク解除(histfile〜)

bash-4.2コードは、履歴ファイルをバックアップしないことを除いて同じように機能します。設定のように、histappendが設定されていないと仮定すると、各シェルは終了時に同じことを行います。

履歴ファイルの長さがゼロになるには、いくつかの方法があります。mallocが失敗するか、書き込みが失敗する可能性があります。bash-4.2では、その時点で切り捨てられた履歴ファイルについて何もするのは遅すぎます。bash-4.3では、以前の履歴ファイルが復元されます。

bug-bashのこのメーリングリストスレッドには、問題、考えられる解決策、およびこれを取り巻く懸念についての適切な議論が含まれています。

他にもいくつかの可能性があります。

  • ある時点で、HISTSIZEまたはHISTFILESIZEが0に設定されました
  • ある時点で、readline history-sizeが0に設定されました
  • 誰かが、意図的であろうと意図せずであろうと、bash履歴を消去しました(経由> "$HISTFILE"または類似)

後者の場合、誰かがあなたのアカウントにアクセスしておらず、彼らのトラックを粗雑な方法で隠そうとしていることを確認したいかもしれません。見てくださいlast/var/log/auth(または/var/log/secureCentOSの/ RHEL上に)、あなたはそれを持っている場合、任意のプロセスアカウンティングおよび/または、インストールされているかもしれ監査ソフトウェア。


1

誤ってbash履歴を削除した方法:

私は最初の原則から自分の代替端末readlineスクリプトを展開していました:https : //tiswww.cwru.edu/php/chet/readline/rluserman.html

そして、ターミナルでテストします。GNU Readlineには履歴サイズと履歴保存命令が組み込まれているため、履歴サイズをデフォルトに設定できるため、すべての履歴が吹き飛ばされます。

メモリに残っている場合の履歴の回復:

リブートする前にそれをキャッチした場合、またはクリアの前から端末を開いたままにした場合、メモリ内で履歴を見つけることができる場合があります。history | cut -c 8- > histback_user1.txt開いたままにして、すべてのユーザーのすべての端末で実行します。それはあなたの拡張された歴史を持つファイルを作成した場合は、交換することができ~/.bash_historyhistback_user1.txt。また、最近システムにログインしたすべてのユーザーの履歴とルートの履歴を確認します。多くの状況で誤ってbash履歴をクリアするのは簡単です。そのため、履歴が失われないようにしたい場合は、毎日のバックアップスクリプトが必要です。


よろしくお願いします。一体何が起こったのかはわかりませんが、私の履歴は昨日リセットされ、今まで気づかなかったのです。しかし、幸運なことに、1つのターミナルウィンドウが開いていたのではなく、10(!)が開いていました。今はすべて良いです。
Marc.2377
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.