bash_history
ファイルの内容を変更するにはどうすればよいですか?どの値または変数が履歴の持続時間を制御しますか?私のBASH履歴をより細かく制御するために変更できる他のことはありますか?
履歴サイズを制御する2つの変数があります。
HISTFILESIZE履歴ファイルに含まれる最大行数。この変数に値が割り当てられると、履歴ファイルは、必要に応じて、最も古いエントリを削除することによってその行数を超えないように切り捨てられます。履歴ファイルも、シェルの終了時に書き込んだ後、このサイズに切り捨てられます。値が0の場合、履歴ファイルはサイズがゼロに切り捨てられます。非数値およびゼロ未満の数値は切り捨てを禁止します。シェルは、起動ファイルを読み取った後、デフォルト値をHISTSIZEの値に設定します。
そして
HISTSIZEコマンド履歴に記憶するコマンドの数(以下の履歴を参照)。値が0の場合、コマンドは履歴リストに保存されません。ゼロより小さい数値を指定すると、すべてのコマンドが履歴リストに保存されます(制限はありません)。シェルは、スタートアップファイルを読み取った後、デフォルト値を500に設定します。
これら2つの変数により、履歴の動作を制御できます。基本的に、HISTSIZE
は現在のセッション中に保存されたコマンドの数であり、HISTFILESIZE
はセッション間で記憶されるコマンドの数です。したがって、たとえば:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
上記の例では、HISTSIZE
が10に設定されているため、history
は10個のコマンドのリストを返します。ただし、ログアウトしてから再度ログインすると、history
は5に設定されているため、HISTFILESIZE
は5つのコマンドのみを返します。これは、セッションを終了すると、HISTFILESIZE
履歴の行が履歴ファイルに保存されます(デフォルトでは~/.bash_history
ですが、HISTFILE
によって制御されます)。言い換えると、コマンドはHISTFILE
に追加され、それが$HISTFILESIZE
行に達するまで追加されます。追加された各行は、ファイルの最初のコマンドが削除されることを意味します。
これらの変数の値は~/.profile
(またはそのファイルが存在する場合は~/.bash_profile
)に設定できます。最初に~/.bashrc
にそれらを設定しないでください。これらは そこにビジネスが設定されていない であり、2番目に、ログインシェルと非ログインシェルで異なる動作が発生する可能性があるためです- その他の問題 。
履歴の動作を微調整できる他の有用な変数は次のとおりです。
HISTIGNORE
:これにより、ほとんど関心がない特定の一般的なコマンドを無視できます。たとえば、次のように設定できます。
export HISTIGNORE="pwd:df:du"
これにより、pwd
、df
、またはdu
で始まるすべてのコマンドが無視され、履歴に保存されなくなります。
HISTCONTROL
:履歴の動作を選択できます。個人的には、HISTCONTROL=ignoredups
に設定して、重複したコマンドを1回だけ保存するようにしています。その他のオプションは、空白で始まるコマンドを無視するignorespace
と、現在の行に一致する以前のすべての行を、その行が保存される前に履歴リストから削除するerasedups
です。 ignoreboth
は、ignorespaceおよびignoredupsの省略形です。
HISTTIMEFORMAT
:履歴ファイルの時間形式を設定できます。詳細については、Pandyaの回答を参照するか、man bash
をご覧ください。
さらに微調整するには、次のものが必要です。
histappend
bashオプション。これは、shopt -s histappend
を実行するか、そのコマンドを~/.bashrc
に追加することで設定できます。このオプションが設定されている場合
履歴リストは、シェルの終了時に、ファイルを上書きするのではなく、HISTFILE変数の値で指定されたファイルに追加されます。
これは、さまざまなセッションの履歴を組み合わせることができるため、非常に便利です(たとえば、さまざまな端末を考えてみてください)。
history
コマンドには2つの便利なオプションがあります。
history -a
:最後のコマンドが履歴ファイルに自動的に書き込まれるようにします
history -r
:履歴ファイルを現在のセッションにインポートします。
たとえば、次の2つのコマンドをPrompt_COMMAND
に追加できます(これは、シェルがプロンプトを表示するたびに実行されるため、新しいシェルを開始するたびに、シェルで実行する各コマンドの後に実行されます)。
export Prompt_COMMAND='history -a;history -r;'
これらを組み合わせると、新しい端末を開いたときに、他のシェルセッションの履歴がすぐにインポートされます。結果は、すべての端末/シェルセッションに共通の履歴です。
履歴ファイルのデフォルトのサイズは500行です。 .bash_historyファイルが500行に達すると、FIFOのように、新しいエントリのためのスペースを空けるために、初期のエントリが削除されます。これは、変数HISTFILESIZE
の値を変更することで変更できます。デフォルトでは、値は500です。
HISTFILESIZE=10000
を.bashrcに含めると、履歴ファイルが保持できる行数が10000に増えるため、その内容の寿命が長くなります。
読んだ man bash
bash履歴の詳細については、次のように説明します。
HISTCONTROL コマンドを履歴リストに保存する方法を制御する値をコロンで区切ったリスト。 値のリストにignorespaceが含まれている場合、スペース文字で始まる行は は履歴リストに保存されていません。 ignoreupsの値により、以前の 履歴エントリに一致する行が保存されなくなります。 ignorebothの値は、ignorespaceおよび ignoredupsの省略形です。 erasedupsの値を指定すると、現在の行に一致する以前のすべての行が から履歴リストから削除されてから、その行が保存されます。上記の リストにない値は無視されます。 HISTCONTROLが設定されていない場合、または有効な値が含まれていない場合は、シェルパーサーによって読み取られたすべての行 が履歴リストに保存され、HISTIG- NOREの値に従います。複数行の複合コマンドの2行目以降はテストされません。 であり、HISTCONTROLの値に関係なく履歴に追加されます。 HISTFILE ファイルの名前コマンド履歴が保存される場所(以下の履歴を参照)。デフォルトの 値は〜/ .bash_historyです。設定されていない場合、シェルの終了時にコマンド履歴は保存されません。 HISTFILESIZE 履歴ファイルに含まれる最大行数。この変数に値 が割り当てられると、履歴ファイルは、必要に応じて、最も古いエントリを削除することにより、その行数 以下の行を含むように切り捨てられます。履歴ファイルも、シェルの終了時に書き込んだ後、このサイズに切り捨てられます 。値が0の場合、履歴ファイルは のゼロサイズに切り捨てられます。非数値およびゼロ未満の数値は切り捨てを禁止します。 シェルは、スタートアップファイルを読み込んだ後、デフォルト値をHISTSIZEの値に設定します。 HISTIGNORE コロンで区切られたパターンのリスト。 履歴リスト。各パターンは行の先頭に固定され、行全体と一致する必要があります (暗黙の「*」は追加されません)。各パターンは、HISTCONTROLで指定されたチェックが適用された後、ライン に対してテストされます。通常のShell パターンマッチング文字に加えて、 `& 'は前の履歴行と一致します。 `& 'はバックスラッシュを使用してエスケープできます 。マッチを試みる前にバックスラッシュが削除されます。複数行複合コマンドの2行目以降の行はテストされず、HISTIGNORE。 HISTSIZE の値に関係なく 履歴に追加されます。コマンド履歴に記憶するコマンドの数(以下の履歴を参照)。 の値が0の場合、コマンドは履歴リストに保存されません。ゼロより小さい数値 を指定すると、すべてのコマンドが履歴リストに保存されます(制限はありません)。 Shell は、起動ファイルを読み込んだ後、デフォルト値を500に設定します。 HISTTIMEFORMAT この変数が設定されていてnullでない場合、その値はstrftime(のフォーマット文字列として使用されます。 3) は、組み込みのhistory によって表示される各履歴エントリに関連付けられたタイムスタンプを印刷します。この変数が設定されている場合、タイムスタンプは履歴ファイルに書き込まれるため、シェルセッション全体で保持される可能性があります 。これは、履歴コメント文字を使用して、他の履歴行から区別する タイムスタンプを区別します。
特にHISTFILESIZE
およびHISTSIZE
は、探しているとあなたを助けるかもしれません。