BashHISTSIZEvs.HISTFILESIZE
1. 概要
このチュートリアルでは、Bash HISTFILESIZEおよびHISTSIZE変数の重要性を理解します。 また、デフォルト値とその違いについても確認します。
2. Bashの履歴とそのデフォルトの動作
Bashシェルは、ユーザーのログイン時にインタラクティブに読み込まれると、履歴ファイルの内容をメモリに読み込みます。シェルセッション中に、履歴のメモリ内コピーにコンテンツを追加します。
端末でhistoryコマンドを実行すると、Bashはメモリ内のコピーを読み取り、実行されたコマンドの履歴を表示します。 最後に、シェルが終了すると、メモリ内のコンテンツがHISTFILE環境変数が指すファイルのディスクに書き戻されます。
デフォルトでは、コンテンツはユーザーのホームディレクトリにある.bash_historyファイルに保存されます。
$ echo $HISTFILE
/home/shubh/.bash_history
履歴ファイルに保存できる行数は、2つの特別な変数HISTSIZEとHISTFILESIZEによって制御されます。
3. HISTSIZEおよびHISTFILESIZE変数
HISTSIZE変数に設定されている値は、メモリに保存できる履歴の最大行数です。 変数のデフォルト値を確認することから始めましょう:
$ echo $HISTSIZE
500
これは、デフォルトで、特定のBashセッションの履歴に最大500行を保存できることを意味します。
概念をよりよく理解するために、少し実験してみましょう。
$ HISTSIZE=3
$ echo $HISTSIZE
3
メモリに3つのレコードのみを保持するように変数を設定しました。 historyコマンドを実行して確認しましょう。
$ history
1502 HISTSIZE=3
1503 echo $HISTSIZE
1504 history
さらにいくつかのコマンドを実行して、動作をさらに確認しましょう。
$ echo "Let's add a record to history"
Let's add a record to history
$ history
2511 history
2512 echo "Let's add a record to history"
2513 history
ご覧のとおり、Bashメモリには最後の3つのコマンドしか保存できません。
一方、HISTFILESIZE変数は、ディスク上の履歴ファイルに書き戻すことができる最大行数を制御します。
変数のデフォルト値を確認してみましょう。
$ echo $HISTFILESIZE
500
したがって、デフォルトでは、〜/ .bash_historyファイルに最大500行を書き込むことができます。
Bashセッションで500を超えるコマンドを実行する状況を考えてみます。 したがって、 Bashの終了時に、Bashセッションが終了すると、最後の500コマンドのみが履歴ファイルに保存されます。
4. 違いを理解する
ここで少し実験して、 HISTFILESIZEの値をHISTSIZE:の値よりも小さく設定します。
$ HISTFILESIZE=5 && echo $HISTFILESIZE
5
$ HISTSIZE=10 && echo $HISTSIZE
10
それでは、ターミナルでいくつかのテストコマンドを実行してみましょう。
$ echo "Command1" >/dev/null
$ echo "Command2" >/dev/null
$ echo "Command3" >/dev/null
$ echo "Command4" >/dev/null
$ echo "Command5" >/dev/null
$ echo "Command6" >/dev/null
$ echo "Command7" >/dev/null
$ echo "Command8" >/dev/null
$ echo "Command9" >/dev/null
$ echo "Command10" >/dev/null
$ echo "Command11" >/dev/null
$ echo "Command12" >/dev/null
historyコマンドの出力を確認してみましょう。
$ history
508 echo "Command4" >/dev/null
509 echo "Command5" >/dev/null
510 echo "Command6" >/dev/null
511 echo "Command7" >/dev/null
512 echo "Command8" >/dev/null
513 echo "Command9" >/dev/null
514 echo "Command10" >/dev/null
515 echo "Command11" >/dev/null
516 echo "Command12" >/dev/null
517 history
観察できるように、
ここで、現在のBashセッションを正常に終了し、再度ログインして、historyコマンドの出力を確認しましょう。
$ history
1 echo "Command10" >/dev/null
2 echo "Command11" >/dev/null
3 echo "Command12" >/dev/null
4 history
5 exit
ここでは、出力には前のセッションの最後の5行のみが含まれています。 この例が示すように、nがHISTFILESIZEの値に等しい最後のn行のみがディスクに書き込まれ、次のセッションで使用できます。
の互換性のない値が原因で履歴データが失われる可能性があることに注意することが重要です。
4. 結論
このチュートリアルでは、Bash履歴変数 HISTSIZEとHISTFILESIZE、の重要性とそれらの違いについて説明しました。