historyコマンドでbashのコマンド履歴が途中までしか探れない場合について
端末でbashを使ってコマンド操作をしているときに、historyコマンドで過去に実行したコマンドを探ろうとしてもhistoryファイルに保存されているはずの分が出力されてこないケースがあります。
これはbashの環境変数のHISTSIZEとHISTFILESIZEの設定が間違っていることが考えられます。
(この環境変数はUbuntuではホームディレクトリ以下の.bashrcファイルに書かれている)
まずbashのコマンド履歴の保管の仕方として、bashの実行中は「history list」に蓄積。そしてbashを終了したときに「history file」へ書き出す、というようになっているようです(詳しくはドキュメント参照)。そして再びbashを起動したときに「history file」から履歴情報を「history list」に読み込む、となっているようです。
(history fileは通常はホームディレクトリ以下の.bash_historyファイル)
そして
「history list」のサイズはHISTSIZE
「history file」のサイズはHISTFILESIZE
で指定されています。
(Bash Reference Manual: Bash Variables)
つまりはHISTFILESIZEをいくら大きな数字に取っても、HISTSIZEがそれより小さければ途中までしか読み込まれないということになります。
実験として試しに
HISTSIZE=10
HISTFILESIZE=2000
として設定を反映、そして端末(bash)を起動してhistoryコマンドを実行すると、historyファイルには2000件も保存されていても直近の10件のコマンド履歴しか出力されないことが分かります。
(設定の反映についてはsourceコマンドについて参照)
通常はHISTZIEとHISTFILESIZEをどちらも同じ数字で十分な大きさで確保しておけば、まず問題はないかと思います。
まぁ実のところ以前よく分からないままこの環境変数を適当に設定していてこういうようなことをやらかしていたんで、せっかくなのでそれをまとめてみたというお話でした。
これはbashの環境変数のHISTSIZEとHISTFILESIZEの設定が間違っていることが考えられます。
(この環境変数はUbuntuではホームディレクトリ以下の.bashrcファイルに書かれている)
まずbashのコマンド履歴の保管の仕方として、bashの実行中は「history list」に蓄積。そしてbashを終了したときに「history file」へ書き出す、というようになっているようです(詳しくはドキュメント参照)。そして再びbashを起動したときに「history file」から履歴情報を「history list」に読み込む、となっているようです。
(history fileは通常はホームディレクトリ以下の.bash_historyファイル)
そして
「history list」のサイズはHISTSIZE
「history file」のサイズはHISTFILESIZE
で指定されています。
(Bash Reference Manual: Bash Variables)
つまりはHISTFILESIZEをいくら大きな数字に取っても、HISTSIZEがそれより小さければ途中までしか読み込まれないということになります。
実験として試しに
HISTSIZE=10
HISTFILESIZE=2000
として設定を反映、そして端末(bash)を起動してhistoryコマンドを実行すると、historyファイルには2000件も保存されていても直近の10件のコマンド履歴しか出力されないことが分かります。
(設定の反映についてはsourceコマンドについて参照)
通常はHISTZIEとHISTFILESIZEをどちらも同じ数字で十分な大きさで確保しておけば、まず問題はないかと思います。
まぁ実のところ以前よく分からないままこの環境変数を適当に設定していてこういうようなことをやらかしていたんで、せっかくなのでそれをまとめてみたというお話でした。
コメント
コメントを投稿