を実行するhistoryと、最新の実行コマンドが表示されます。
しかし、私がやったtail -f $HISTFILE場合tail -f ~/.bash_history、それらはリストされません。
ファイルはロックされますか、一時的な場所などがありますか?
を実行するhistoryと、最新の実行コマンドが表示されます。
しかし、私がやったtail -f $HISTFILE場合tail -f ~/.bash_history、それらはリストされません。
ファイルはロックされますか、一時的な場所などがありますか?
回答:
Bashは、実行中にコマンドのリストを内部的にメモリに保持します。それらは.bash_history終了時に書き込まれます:
対話型シェルが終了すると、最後の$ HISTSIZE行が履歴リストから$ HISTFILEで指定されたファイルにコピーされます
コマンド履歴を強制的に書き出す場合は、history -a次のコマンドを使用できます。
新しい履歴行(現在のBashセッションの開始以降に入力された履歴行)を履歴ファイルに追加します。
-wオプションもあります:
現在の履歴を履歴ファイルに書き出します。
履歴の使用方法に応じて、より適している場合があります。
それらが常にすぐに書き込まれるようにしたい場合は、そのコマンドをPROMPT_COMMAND変数に入れることができます。
export PROMPT_COMMAND='history -a'
              セッションがアクティブな間、コマンドはメモリ(RAM)に保存されます。シェルを閉じるとすぐに、.bash_historyシャットダウンする前にコマンドリストが書き込まれます。
したがって、現在のセッションの履歴はに表示されません.bash_history。
bash終了時に更新されますが、これは再起動を意味しません(特に、必要に応じて端末を開いたり閉じたりできるグラフィカル環境では)。
                    実行中、履歴は次の場合にのみメモリに保存されます(デフォルト)。
Hin echo "$-")が設定されます。0 *(または他の非常に制限的なパターン)ではありません。上記のいずれかが失敗した場合、履歴はメモリに保存されず、その結果、ディスクに履歴を書き込むことも書き込むこともできません。
メモリ内の履歴は、次の場合にディスクに書き込まれます。
ただし、シェルが終了したとき、またはコマンドhistory -a(追加)またはhistory -w(書き込み)が実行された場合のみです。
ディスクへの即時書き込みをトリガーするには、変数を使用できます。
 PROMPT_COMMAND='history -a'
これはappend、new履歴ファイルへの履歴行になります。これらは、現在のbashセッションの開始以降に入力された履歴行ですが、まだ履歴ファイルに追加されていません。
または:
 PROMPT_COMMAND='history -w'
するために、上書きメモリからのリストとHISTFILEで歴史を。
そのため、メモリ内の履歴からコマンドを削除できます。
 $ history 5
  6359  ls
  6360  cd ..
  6361  comand --private-password='^%^&$@#)!@*'
  6362  top
  6363  set +o | less
 $ history -d 6361
 $ history 5
  6359  ls
  6360  cd ..
  6361  top
  6362  set +o | less
 $ history -w
最後のコマンドでディスクに書き込みます:
 history -w    # with `shopt -u histappend` unset
              
.bash_historyファイルが誤ってrootによって所有された場合、動作は停止します。その場合、所有権を確認し、sudo必要に応じて所有権を修正するために使用します。