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