私のbashレコードが誤って消去される原因は何ですか?

私のbashレコードが誤って消去される原因は何ですか?

今日私は私のbashの記録が完全に消去されたことを発見しました。ファイルを実行history -cまたは削除しませんでした.bash_history.bash_historyファイルの削除に加えてhistory -cbash履歴を消去する方法は?

ベストアンサー1

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

Chet Ramey(現在のbashマネージャ)が提供しました。良いまとめこの質問の条件は次のとおりです。

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

  • 名前変更(ヒストファイル、ヒストファイル~)
  • O_CREAT | O_TRUNCを使用してファイルを開きます。
  • mallocバッファは、すべての履歴データを保持するのに十分な大きさです。
  • 1回のwrite(2)呼び出しですべての履歴エントリを書き込む
  • ファイルを閉じる
  • 接続解除(ヒストファイル~)

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

履歴ファイルの長さがゼロになる状況はいくつかあります。つまり、 malloc が失敗するか、書き込みが失敗する可能性があります。 bash-4.2では、この時点で切り捨てられた履歴ファイルで作業を実行するには遅すぎます。 bash-4.3では、古い履歴ファイルが復元されます。

このメーリングリストのトピックBug-bashでは、問題、考えられる解決策、およびこの問題に関する懸念に関する適切な議論が含まれています。

他の可能性もあります:

  • ある時点で、HISTSIZEorはHISTFILESIZE0に設定されます。
  • ある時点で、readlineはhistory-size0に設定されます。
  • 誰かが意図的にまたは意図せずに(> "$HISTFILE"または同様の手段を介して)bashの記録を消去しました。

後者の場合、誰かが自分のアカウントにアクセスしていないか、おおよその方法で自分の痕跡を隠そうとしているかどうかを確認したい場合があります。インストールしたプロセス会計および/または監査ソフトウェアがある場合(またはCentOS / RHELで)確認してくださいlast/var/log/auth/var/log/secure

おすすめ記事