この記事ではbash環境でのhistory
の基本的な使い方と例、オプションなどについて解説しています。
history コマンド
history
コマンドで現在ログインしているユーザーの実行したコマンドの履歴を表示することができます。コマンドの引数などもすべて表示することができるので、「使ったことあるけど使い方忘れた!」というコマンドの使い方を簡単に調べることができます。
一覧で表示する
引数も何もなしでhistory
コマンドを実行すると、履歴ファイルに保存されている全行をコンソールに表示します。
$ history ... 1140 vim led.py 1141 python led.py 1142 cat led.py 1143 exit
ずらずらずらーっと一気に表示されるので焦るかもしれないですが、ファイルの内容を読みだしているだけなので負荷は低いです。
コンソール上に古い順で出力されるので、最終的には画面上には直近数コマンドが表示されます。直近のコマンドだけを知りたい場合はこれでも十分使えますね!
履歴内を検索して結果を表示する
grep
コマンドと組み合わせて実行することで任意のコマンド、ファイル名などを含む履歴のみを抽出することができます。history
の結果は標準出力なのでパイプで渡してあげます。
history | grep [検索文字列]
で実行します。
$ history | grep forever 774 which forever 775 sudo -u hoge /usr/local/bin/forever start index.js --minUptime 1000 --spinSleepTime 1000 776 sudo -u hoge forever stopall
コマンド名や、渡すファイル名などが思い出せないときによく使います。注意が必要なのが実行した結果エラーが発生するようなコマンドも記載されているので、実行前にtypoが無いかなど確認してください。
直近n件の履歴を表示する
history
単体で実行すると大量の出力でターミナルが埋め尽くされてしまい困る場合があります。その場合はtail
を使用して出力行を制限します。
history | tail -n [行数]
で直近の履歴から指定した行数だけ表示します。
$ history | tail -n 5 1188 history | tail -n29 1189 history | tail -n10 1190 history | tail -n 3 1191 history | head 1192 history | tail -n 5
あまり使う機会はないですがhead
で最古の履歴から指定した行数だけ表示することも可能です。がキャッシュファイルにあるだけしか表示できないのですべての履歴をさかのぼることは無理な場合が多いです。
-w オプションで履歴をファイルに保存する
-w [ファイル名]
をつけて実行すると現在の履歴を指定したファイル名で保存できます。手順書などを後から整備しようとしていると、場合によっては履歴が流れてしまっていることがあるのでこのようにして保存することができます。
w
はWriteOut(書き出し)のw
です。
$ history -w ./hisotry_today $ history | tail -n 1 history -w ./hisotry_today
-r オプションで履歴ファイルを読み込む
-r [履歴ファイル名]
で先ほど保存したファイルを読み込んで履歴を切り替えることができます。
-c オプションで履歴を削除する
-c
オプションをつけて実行することで履歴を削除することができます間違えてコマンドライン上でパスワードを記載して実行してしまった場合なんかにこれで対処できます。
履歴を削除する前に、-w
などでバックアップを取り、共同で作業している人に確認しておいたほうがベターです。削除しなくとも、指定した最大行数を超えたコマンドは、古いものから順に削除されていくので手動で削除する必要はありません。
履歴が保存されているファイル
ユーザーのホームディレクトリに.bash_history
というファイルがあります。ログアウトと同時にこのファイルに履歴が追記されていくようです。
このファイルをコピーすることでもバックアップすることはできますが、不慮の事故を避けるために-w
オプションを使用したほうが無難です。
履歴に保存する件数を設定する
.bashrc
内で環境変数を設定することで最大行数や最大ファイルサイズを指定することができます。Raspberry Piのデフォルトの設定は以下のようになっています。
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) HISTSIZE=1000 HISTFILESIZE=2000
HISTSIZE
で行数を指定しています(1000行)。HISTFILESIZE
ではファイルサイズを制限しています(2000KB)。ほとんどの場合は1000行制限に先に引っ掛かり古いコマンドから順に削除されていきます。
無制限に履歴を保存したい場合には、上記の両方の変数に空文字など数値以外の値をセットすればOKです。
HISTSIZE="" HISTFILESIZE=""
ファイルサイズが無限に増えていくでhistory
コマンドの実行時間が伸びたりディスクを圧迫する可能性があります。
参考
以下のサイトの情報を引用・参考にしました。