bashを日常的に使っていると、以前実行したコマンドをあとから探したい場面がよくあります。標準設定のままだと履歴の保存件数が少なかったり、複数のターミナルを開いて作業したときに履歴がうまく共有されなかったりすることがあります。
ここでは、bashの履歴を長めに保存し、複数セッションでも扱いやすくするための基本設定を紹介します。
設定内容
次の設定を ~/.bashrc に追加します。
export HISTSIZE=100000
export HISTFILESIZE=200000
shopt -s histappend
export PROMPT_COMMAND='history -a; history -c; history -r'
export HISTCONTROL=ignoredups:erasedups:ignorespace
設定を追加したら、次のコマンドで反映します。
source ~/.bashrc
目的
この設定の主な目的は、bashのコマンド履歴をより便利に使うことです。
HISTSIZE と HISTFILESIZE を大きくすることで、過去に実行したコマンドを長く保存できます。よく使うコマンドや、少し前に実行した複雑なコマンドを再利用しやすくなります。
また、histappend を有効にすることで、履歴ファイルを上書きするのではなく追記するようになります。複数のターミナルを開いて作業している場合でも、履歴が消えにくくなります。
さらに、PROMPT_COMMAND の設定により、コマンドを実行するたびに履歴を保存し直し、他のターミナルで実行された履歴も読み込みます。これにより、複数のセッション間で履歴を共有しやすくなります。
各設定の意味
HISTSIZE
export HISTSIZE=100000
現在のシェルで保持する履歴の件数を指定します。
この例では、最大10万件の履歴をメモリ上に保持します。
HISTFILESIZE
export HISTFILESIZE=200000
履歴ファイルに保存する件数を指定します。
この例では、最大20万件の履歴を履歴ファイルに保存します。
histappend
shopt -s histappend
bashの終了時に履歴ファイルを上書きせず、追記する設定です。
複数のターミナルを使っている場合、最後に閉じたターミナルの履歴だけが残る、といった問題を減らせます。
PROMPT_COMMAND
export PROMPT_COMMAND='history -a; history -c; history -r'
プロンプトが表示されるたびに実行されるコマンドを指定します。
この設定では、次の処理を順番に行います。
history -a
現在のセッションで追加された履歴を、履歴ファイルに追記します。
history -c
現在のシェル上の履歴を一度クリアします。
history -r
履歴ファイルから履歴を読み込み直します。
これにより、他のターミナルで実行されたコマンドも、現在のターミナルの履歴に反映されやすくなります。
使い方
設定後は、通常どおりbashを使うだけです。
過去のコマンドを探すには、Ctrl + r を押して履歴検索を使います。コマンドの一部を入力すると、過去に実行したコマンドを検索できます。
Ctrl + r
また、history コマンドで履歴一覧を表示できます。
history
履歴が長くなるため、grep と組み合わせると便利です。
history | grep ssh
history | grep docker
history | grep rsync
注意点
この設定では履歴を長く保存するため、パスワードやトークンなどの機密情報をコマンドラインに直接入力しないよう注意が必要です。
誤って機密情報を入力した場合は、履歴ファイルから該当行を削除する必要があります。通常、bashの履歴ファイルは次の場所にあります。
~/.bash_history
まとめ
この設定を入れておくと、bashの履歴を長期間保存でき、複数のターミナルを使った作業でも履歴を共有しやすくなります。
普段からターミナルをよく使う場合、過去のコマンドをすばやく再利用できるため、作業効率の向上につながります。