昨日はCentOS 7で多くのコマンドを発行しましたが、今日これらのコマンドを取得したいのですが、レコードがないことに気づきました。ファイルを開いたとき.bash_history
、昨日発行したコマンドはまだ見つかりませんでしたが、数日前に多くの古いコマンドを見つけました。最近のコマンドが保存されなかったのはなぜですか?履歴機能を増やすにはどうすればよいですか?
履歴アイテムが表示されない原因として最も可能性が高いのは、HISTFILE
をなしまたはHISTSIZE
をゼロに設定することではなく、同じマシンに2回ログインして2番目のbashインスタンスで終了することです(たくさんやった後)デフォルトでは、Bashは履歴をマージせず、2番目のBash出口は、最初のBash出口によって非常に適切に更新された.bash_history
を上書きします。
これが発生しないようにするには、上書きする代わりに履歴ファイルに追加できます。histappend
シェルオプションを使用できます。
Histappendシェルオプションが有効になっている場合(以下のシェルの組み込みコマンドの下のshoptの説明を参照)、行が履歴ファイルに追加されます。それ以外の場合、履歴ファイルは上書きされます。
詳細は this answer で、HISTSIZE
、HISTFILESIZE
、HISTCONTROL
を使用してサイズや重複を制御する方法などが含まれます。
履歴サイズを変更するには、2つのBASH変数HISTSIZE
、HISTFILESIZE
を使用します(通常、.bashrc
)。
BASH manページの説明:
[〜#〜] histsize [〜#〜]コマンド履歴に記憶するコマンドの数(以下の履歴を参照)。値が0の場合、コマンドは履歴リストに保存されません。ゼロより小さい数値を指定すると、すべてのコマンドが履歴リストに保存されます(制限はありません)。シェルは、スタートアップファイルを読み取った後、デフォルト値を500に設定します。
[〜#〜] histfilesize [〜#〜]履歴ファイルに含まれる最大行数。この変数に値が割り当てられると、履歴ファイルは、必要に応じて、最も古いエントリを削除して、その行数を超えないように切り詰められます。履歴ファイルも、シェルの終了時に書き込んだ後、このサイズに切り捨てられます。値が0の場合、履歴ファイルはサイズがゼロに切り捨てられます。非数値およびゼロ未満の数値は切り捨てを禁止します。シェルは、起動ファイルを読み取った後、デフォルト値をHISTSIZEの値に設定します。
例として、私は.bashrc
ファイル:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
HISTCONTROL
環境変数がignorespace
またはignoreboth
に設定されていないことを確認してください。
$ echo $HISTCONTROL
ignoredups #this is ok
~/.bash_profile
または~/.profile
ファイルに値を設定することで、これを変更できます。
HISTCONTROL=ignoredups
bash
manページから:
ヒストコントロール
履歴リストにコマンドを保存する方法を制御する、コロンで区切られた値のリスト。
値のリストに
ignorespace
が含まれている場合、スペース文字で始まる行は履歴リストに保存されません。
ignoredups
の値を指定すると、前の履歴エントリに一致する行が保存されなくなります。
ignoreboth
の値は、ignorespace
およびignoredups
の省略形です。
erasedups
の値を指定すると、現在の行に一致する以前のすべての行が、その行が保存される前に履歴リストから削除されます。上記のリストにない値は無視されます。
HISTCONTROL
が設定されていない場合、または有効な値が含まれていない場合、シェルパーサーによって読み取られたすべての行がHISTIGNORE
の値に従って履歴リストに保存されます。複数行の複合コマンドの2行目以降はテストされず、HISTCONTROL
の値に関係なく履歴に追加されます。