1. 概要

このチュートリアルでは、Bash HISTFILESIZEおよびHISTSIZE変数の重要性を理解します。 また、デフォルト値とその違いについても確認します。

2. Bashの履歴とそのデフォルトの動作

Bashシェルは、ユーザーのログイン時にインタラクティブに読み込まれると、履歴ファイルの内容をメモリに読み込みます。シェルセッション中に、履歴のメモリ内コピーにコンテンツを追加します

端末でhistoryコマンドを実行すると、Bashはメモリ内のコピーを読み取り、実行されたコマンドの履歴を表示します。 最後に、シェルが終了すると、メモリ内のコンテンツがHISTFILE環境変数が指すファイルのディスクに書き戻されます。

デフォルトでは、コンテンツはユーザーのホームディレクトリにある.bash_historyファイルに保存されます。

$ echo $HISTFILE
/home/shubh/.bash_history

履歴ファイルに保存できる行数は、2つの特別な変数HISTSIZEHISTFILESIZEによって制御されます。

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

観察できるように、 出力には、最後の10個のコマンドが表示されます。 これは、HISTSIZE変数の値と同じです。

ここで、現在の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履歴変数 HISTSIZEHISTFILESIZE、の重要性とそれらの違いについて説明しました。