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

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

私のファイルの内容をどのように修正しますかbash_history?記録が持続する期間を制御する値または変数は何ですか?私のBASH履歴をより効果的に制御するために変更できる他の項目はありますか?

答え1

記録サイズを制御する2つの変数があります。

HISTFILESIZE履歴ファイルに含まれる最大行数。この変数に値が割り当てられると、必要に応じて最も古いエントリが削除され、その行数だけが含まれるように履歴ファイルが切り捨てられます。シェルが終了すると、履歴ファイルも作成され、このサイズに切り捨てられます。値が0の場合、履歴ファイルは0サイズに切り捨てられます。数値以外の値とゼロより小さい数値は切り捨てが禁止されます。シェルは起動ファイルを読み込んだ後、デフォルト値を HISTSIZE 値に設定します。

そして

HISTSIZEコマンド履歴に記憶するコマンドの数(下記の「記録」を参照)。値が 0 の場合、コマンドは履歴リストに保存されません。 0より小さい値を使用すると、各コマンドは履歴リストに制限なく保存されます。シェルは起動ファイルを読み込んだ後、デフォルト値を 500 に設定します。

これら2つの変数を使用すると、履歴の動作を制御できます。デフォルトでは、HISTSIZEこれは現在のセッション中に保存されたコマンドの数であり、セッションHISTFILESIZE全体に記憶されたコマンドの数です。たとえば、次のようになります。

$ echo $HISTSIZE 
10
$ echo $HISTFILESIZE 
5
$ history | wc
     10      29     173

上記の例では、HISTSIZE設定は10なので、history10個のコマンドのリストが返されます。ただし、ログアウトして再度ログインすると設定は5なので、history5つのコマンドのみが返されます。HISTFILESIZEこれは、セッションが終了するとHISTFILESIZE履歴行が履歴ファイルに保存されるためです(~/.bash_historyデフォルトではHISTFILE)。つまり、その行に達するHISTFILEまでコマンドが追加され$HISTFILESIZE、その後に追加される各行はファイルの最初のコマンドが削除されることを意味します。

ファイル内~/.profile(または~/.bash_profileファイルが存在する場合)にこれらの変数の値を設定できます。~/.bashrcすでに設定されているので、最初の位置に設定しないでください。そこには商売がありません。第二に、これはログインシェルと非ログインシェルで異なる動作を引き起こします。その他の問題

記録動作を微調整できるその他の便利な変数は次のとおりです。

  • HISTIGNORE:この機能を使用すると、あまり興味がない一般的に使用される特定のコマンドを無視できます。たとえば、次のように設定できます。

    export HISTIGNORE="pwd:df:du"
    

    pwddfこれにより、、またはで始まるすべてのコマンドはdu無視され、履歴に保存されません。

  • HISTCONTROL:記録の仕組みを選択できます。個人的にはHISTCONTROL=ignoredups、繰り返しコマンドを一度だけ保存するように設定しました。他のオプションは、ignorespaceスペースで始まるコマンドを無視することです。これerasedupsにより、現在の行に一致するすべての前の行が、その行を保存する前に履歴リストから削除されます。ignorebothignorespaceとignoreupsの略語です。

  • HISTTIMEFORMAT:履歴ファイルの時間形式を設定できます。詳細については、Pandyaの回答を参照または読んでくださいman bash


さらに微調整するには、次のものが必要です。

  • バッシュhistappendオプション。shopt -s histappendこのコマンドを実行するか、このコマンドを~/.bashrc.ifに設定した場合は追加します。

    シェルが終了すると、ファイルが上書きされるのではなく、HISTFILE変数の値で指定されたファイルに履歴リストが追加されます。

    これは、異なるセッションの記録を組み合わせることができるため、非常に便利です(たとえば、異なる端末を考慮)。

  • このhistoryコマンドには2つの便利なオプションがあります。

    • history -a:最後のコマンドを自動的に履歴ファイルに書き込みます。

    • history -r:履歴ファイルを現在のセッションにインポートします。

    たとえば、次の2つのコマンドをコマンドに追加できますPROMPT_COMMAND(シェルにプロンプ​​トが表示されるたびに実行されるため、新しいシェルを起動するたびに各コマンドの後に実行されます)。

    export PROMPT_COMMAND='history -a;history -r;'
    

    これを組み合わせると、新しい端末を開くたびに別のシェルセッションの履歴をすぐに取得できます。その結果、すべてのターミナル/シェルセッションに共通の履歴があります。

答え2

履歴ファイルのデフォルトサイズは500行です。 .bash_historyファイルが500行に達すると、FIFOなどの新しい行のスペースを解放するために古いエントリが削除されます。HISTFILESIZE変数値(デフォルトは500)を変更してこの設定を変更できます。

.bashrcにを追加すると、HISTFILESIZE=10000履歴ファイルが保持できる行数が10,000に増え、内容の寿命が延びます。

答え3

man bashコンテンツの詳細を読んでください。バッシュの歴史良い:

組織管理
       コマンドが履歴リストに保存される方法を制御するコロンで区切られた値のリスト。
       値のリストに空白の無視が含まれている場合、空白文字で始まる行は次のようになります。
       履歴リストに保存されません。無視された値は、前の行と一致する行を生成します。
       履歴項目は保存されません。 ignorebothの値はignorespaceの略であり、
       無視される。削除された値は、現在の行と一致するすべての前の行です。
       保存する前に、履歴リストから行を削除してください。上記の範囲に属さないすべての値
       リストは無視されます。 HISTControlが設定されていないか、有効な値が含まれていない場合、すべての行は
       シェルパーサーが読み取る内容は、HISTIG 値に従って履歴リストに保存されます。
       いいえ。複数行の複合コマンドの 2 行目以降の行はテストされません。
       HISTControlの値に関係なく、履歴に追加されます。
歴史文書
       コマンド履歴が保存されるファイル名(以下のHISTORYを参照)。基本
       値は ~/.bash_history です。設定しないと、シェル終了時にコマンド履歴は保存されません。
履歴ファイルサイズ
       履歴ファイルに含まれる最大行数。この変数に値が代入された場合
       必要に応じて、この数字以下を含むように履歴ファイルを切り捨てる値。
       最も古いエントリを削除して行数を減らします。履歴ファイルもこのサイズに切り捨てられます。
       シェルが終了した後に作成されます。値が0の場合、履歴ファイルは切り捨てられます。
       サイズは0です。数値以外の値とゼロより小さい数値は切り捨てが禁止されます。これ
       シェルは起動ファイルを読み込んだ後、デフォルト値を HISTSIZE 値に設定します。
ヒスティンヨ
       保存するコマンドラインを決定するために使用されるコロンで区切られたパターンのリスト。
       歴史のリスト。各パターンは行の先頭に固定されており、一致する必要があります。
       行を完成させてください(暗黙の「*」は追加されません)。すべてのパターンはワイヤーテストを受けました。
       HISTControlで指定した検査を適用した後。普通の殻に加えて
       パターンマッチング文字「&」は前の履歴行と一致します。 `&'はエスケープできます。
       バックスラッシュが使用されます。バックスラッシュは一致を試みる前に削除されます。 2番目と
       複数行の複合コマンドの後続行はテストされませんが、次に追加されます。
       HISTIGNOREの価値に関係なく記録です。
歴史的規模
       コマンド履歴に覚えておく必要があるコマンドの数(下記の「記録」を参照)。もし
       値が 0 の場合、コマンドは履歴リストに保存されません。 0より小さい値
       すべてのコマンドが履歴リストに保存されます(制限なし)。シェル
       スタートアップファイルを読み込んだら、デフォルト値を500に設定します。
過去の時間形式
       この変数が設定されていて空でない場合、その値はstrftime(3)のフォーマット文字列として使用されます。
       履歴表示の各履歴項目に関連するタイムスタンプを印刷します。
       内蔵。この変数が設定されると、タイムスタンプが履歴ファイルに書き込まれます。
       シェルセッション全体で保存されます。これは歴史的なコメント文字を使用して区別されます。
       別の履歴レコードからタイムスタンプを取得します。

特別なHISTFILESIZEそしてHISTSIZEあなたを探して助けてください。

関連情報