214

HISTSIZE対の違いは何HISTFILESIZEですか?

これらは、デフォルトの 500 行を超えて bash 履歴を拡張するために使用されます。

なぜ両方が必要なのかについて、ここや他のフォーラムでは明確さが欠けているようです。(例 1例 2例 3 )。

4

2 に答える 2

350

簡潔な答え:

HISTSIZEbash セッションの進行中に履歴リストのメモリに保存される行またはコマンドの数です。

HISTFILESIZEは、(a) セッションの起動時に履歴ファイルで許可され、(b) 将来のセッションで使用するために bash セッションの終了時に履歴ファイルに保存される行またはコマンドの数です。

file: on disk - とlist: in memoryの違いに注意してください。

長い答え:

上記のすべての情報 + いくつかの例:

例 1 : HISTFILESIZE=10およびHISTSIZE=10

  1. セッションを開始します。
  2. HISTFILE (bash コマンド履歴を保存するファイル) は、HISTFILESIZE=10 行を含むように切り捨てられます。
  3. 50行書きます。
  4. 50 個のコマンドの最後に、コマンド 41 から 50 だけが履歴リストにあり、そのサイズは HISTSIZE=10 によって決定されます。
  5. セッションを終了します。
  6. が有効になっていないと仮定するとhistappend、コマンド 41 から 50 が HISTFILE に保存されます。これには、最初に保持されていた 10 個のコマンドと、新しく書き込まれた 10 個のコマンドが含まれています。
  7. HISTFILE は、HISTFILESIZE=10 行を含むように切り捨てられます。
  8. 履歴には 10 個のコマンドがあります。これは、終了したばかりのセッションで入力した最後の 10 個のコマンドです。
  9. 新しいセッションを開始すると、HISTFILESIZE=10 の HISTFILE で 1 からやり直します。

例 2 : HISTFILESIZE=10およびHISTSIZE=5

  1. セッションを開始します。
  2. HISTFILE (bash コマンド履歴を保存するファイル) は、最大で HISTFILESIZE=10 行を含むように切り捨てられます。
  3. 50行書きます。
  4. 50 個のコマンドの最後に、コマンド 46 から 50 のみが履歴リストにあり、そのサイズは HISTSIZE=5 によって決定されます。
  5. セッションを終了します。
  6. が有効になっていないと仮定するとhistappend、コマンド 46 から 50 が HISTFILE に保存されます。これには、最初に保持されていた 10 個のコマンドと、新しく書き込まれた 5 個のコマンドが含まれています。
  7. HISTFILE は、HISTFILESIZE=10 行を含むように切り捨てられます。
  8. 履歴には 10 個のコマンドがあります。前のセッションからの 5 個と、終了したばかりのセッションで入力した最後の 5 個です。
  9. 新しいセッションを開始すると、HISTFILESIZE=10 の HISTFILE で 1 からやり直します。

例 3 : HISTFILESIZE=5およびHISTSIZE=10

  1. セッションを開始します。
  2. HISTFILE (bash コマンド履歴を保存するファイル) は、最大で HISTFILESIZE=5 行を含むように切り捨てられます。
  3. 50行書きます。
  4. 50 個のコマンドの最後に、コマンド 41 から 50 だけが履歴リストにあり、そのサイズは HISTSIZE=10 によって決定されます。
  5. セッションを終了します。
  6. が有効になっていないと仮定するとhistappend、コマンド 41 から 50 が HISTFILE に保存されます。これには、最初に保持されていた 5 つのコマンドと、新しく書き込まれた 10 個のコマンドが含まれています。
  7. HISTFILE は、HISTFILESIZE=5 行を含むように切り捨てられます。
  8. 履歴には 5 つのコマンドがあります。これは、終了したばかりのセッションで入力した最後の 5 つのコマンドです。
  9. 新しいセッションを開始するときは、HISTFILESIZE=5 の HISTFILE でステップ 1 からやり直します。

elixir_sinariからの情報:

コマンドを入力しても履歴「ファイル」は更新されません。コマンドは個別に「リスト」に保存されます (履歴コマンドによってアクセスされます)。これらの保存されたコマンドの数は、HISTSIZE 値によって制御されます。シェル (インタラクティブ) が終了すると、最後の $HISTSIZE 行がその「リスト」から $HISTFILE にコピー/追加されます。HISTFILESIZE が設定されている場合、この操作の後、 $HISTFILESIZE 行 (最新) のみが $HISTFILE に存在することが保証されます。また、シェルが開始すると、「リスト」は $HISTFILE から最大 $HISTSIZE コマンドまで初期化されます。

そしてman bashページから:

HISTSIZE 変数の値は、履歴リストに保存するコマンドの数として使用されます。最後の HISTSIZE コマンドのテキスト (デフォルトは 500) が保存されます。(...)

起動時に、履歴は変数 HISTFILE (デフォルト ~/.bash_history) で指定されたファイルから初期化されます。HISTFILE の値で指定されたファイルは、HISTFILESIZE の値で指定された行数以下になるように、必要に応じて切り捨てられます。(...) 対話型シェルが終了すると、最後の $HISTSIZE 行が履歴リストから $HISTFILE にコピーされます。histappend シェル オプションが有効になっている場合 (下記の SHELL BUILTIN COMMANDS の shopt の説明を参照)、行が履歴ファイルに追加されます。そうでない場合、履歴ファイルは上書きされます。HISTFILE が設定されていない場合、または履歴ファイルが書き込み不可の場合、履歴は保存されません。(...) 履歴を保存した後、履歴ファイルは HISTFILESIZE 行を超えないように切り捨てられます。HISTFILESIZE が設定されていない場合、

于 2013-10-18T16:43:37.317 に答える