私のファイルの内容をどのように修正しますか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なので、history
10個のコマンドのリストが返されます。ただし、ログアウトして再度ログインすると設定は5なので、history
5つのコマンドのみが返されます。HISTFILESIZE
これは、セッションが終了すると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
オプション。shopt -s histappend
このコマンドを実行するか、このコマンドを~/.bashrc
.ifに設定した場合は追加します。シェルが終了すると、ファイルが上書きされるのではなく、HISTFILE変数の値で指定されたファイルに履歴リストが追加されます。
これは、異なるセッションの記録を組み合わせることができるため、非常に便利です(たとえば、異なる端末を考慮)。
この
history
コマンドには2つの便利なオプションがあります。history -a
:最後のコマンドを自動的に履歴ファイルに書き込みます。history -r
:履歴ファイルを現在のセッションにインポートします。
たとえば、次の2つのコマンドをコマンドに追加できます
PROMPT_COMMAND
(シェルにプロンプトが表示されるたびに実行されるため、新しいシェルを起動するたびに各コマンドの後に実行されます)。export PROMPT_COMMAND='history -a;history -r;'
これを組み合わせると、新しい端末を開くたびに別のシェルセッションの履歴をすぐに取得できます。その結果、すべてのターミナル/シェルセッションに共通の履歴があります。