を実行する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
終了時に更新されますが、これは再起動を意味しません(特に、必要に応じて端末を開いたり閉じたりできるグラフィカル環境では)。
実行中、履歴は次の場合にのみメモリに保存されます(デフォルト)。
H
in 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
必要に応じて所有権を修正するために使用します。