web-dev-qa-db-ja.com

.bash_historyファイルの内容はどのくらい持続しますか?

bash_historyファイルの内容を変更するにはどうすればよいですか?どの値または変数が履歴の持続時間を制御しますか?私のBASH履歴をより細かく制御するために変更できる他のことはありますか?

10
nbro

履歴サイズを制御する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"
    

    これにより、pwddf、または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;'
    

    これらを組み合わせると、新しい端末を開いたときに、他のシェルセッションの履歴がすぐにインポートされます。結果は、すべての端末/シェルセッションに共通の履歴です。

11
terdon

履歴ファイルのデフォルトのサイズは500行です。 .bash_historyファイルが500行に達すると、FIFOのように、新しいエントリのためのスペースを空けるために、初期のエントリが削除されます。これは、変数HISTFILESIZEの値を変更することで変更できます。デフォルトでは、値は500です。

HISTFILESIZE=10000を.bashrcに含めると、履歴ファイルが保持できる行数が10000に増えるため、その内容の寿命が長くなります。

2
Sree

読んだ man bashbash履歴の詳細については、次のように説明します。

 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は、探しているとあなたを助けるかもしれません。

0
Pandya