historyでコマンド履歴を活用

historyでコマンドの履歴が表示される。

ctrl-rでの検索がすごく便利。コマンドの実行回数を数えたりもできる。

以下、使用シェルはbash。

検索

ctrl-rのあと文字列を入力すると、過去に使ったコマンドが検索して表示される。続けてctrl-rを打つと遡れる。戻るときはctrl-s

ctrl-sが効かない場合は、ctrl-sが画面の停止に割り当てられている可能性がある。.bashrcstty stop undefを追記すれば無効化されて検索で使える。

実行回数確認

ワンライナーで確認できる。

1
$ history | awk '{print $2}' | sort | uniq -c | sort -nr | head -n 5

時刻を記録している場合(下記参照)は'{print $2}'の数字の部分を変える。

head -n 5で上位5位を表示するようになっている。例えば510にすれば上位10位までになる。

設定

.bashrcに設定する。

こんな感じ。

1
2
3
export HISTSIZE=10000
export HISTFILESIZE=10000
export HISTCONTROL=ignoreboth

個数

変数名 内容
HISTSIZE historyコマンドで有効な履歴個数
HISTFILESIZE 履歴ファイルに保存される履歴個数
HISTFILE 履歴ファイルの場所(デフォルトは~/.bash_history

コマンド履歴はbash終了時に履歴ファイルに保存され、次に起動したとき履歴ファイルから読み込まれる。HISTSIZEHISTFILESIZEは同じ値にしておけばOK。

HISTSIZEを0にするとコマンド履歴は保存されなくなる。

保存対象

HISTCONTROLで設定。

設定値 内容
ignoredups 直前と同じコマンドは保存しない
ignorespace 空白から始まるコマンドは保存しない
ignoreboth ignoredups + ignorespace
erasedups 重複するコマンドは最新のものだけが保存される
(履歴にある重複コマンドは削除される)

履歴検索で同じコマンドが引っかかるのが嫌な場合はerasedupsを設定すれば良い。どのコマンドを何回実行したかなどのログを残したい場合は何も設定せずにすべての履歴を残しておくこともできる。

:でつなげると複数設定できる。

1
export HISTCONTROL=ignorespace:erasedups

実行時刻を記録

HISTTIMEFORMATで設定。

1
export HISTTIMEFORMAT='%Y-%m-%d %T%z '

保存しないコマンド

HISTIGNOREで設定。

:でつなげると複数設定できる。正規表現も使える。

例えばlsだけ設定するとls -aなどは履歴に残ってしまうので、ls*としておく。

1
export HISTIGNORE=ls*:history*

参考

スポンサーリンク

関連記事

No related post.