りなっくすとらずぱい!

Raspberry Pi初心者に向けた各コマンドの説明、プログラムの作り方について紹介しています!

history - 実行したコマンドの履歴を表示する

f:id:ibuquicallig:20190609111917p:plain

この記事では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コマンドの実行時間が伸びたりディスクを圧迫する可能性があります。

参考

以下のサイトの情報を引用・参考にしました。