historyコマンドはいつ使うのか

historyは過去に実行したコマンドラインが閲覧できて、一見便利に見えます。
便利そうではあるのですが、いざ使おうとすると、履歴から選んで単純実行するだけの、使い方になりがちです。
historyについて考えてみました。

takk~$ history
    1  cd test
    2  ls
    3  cd aaaa
    4  ls
    5  vi test.txt
    6  cd bbbb
    7  emacs test2.txt
    8  cd ..
    9  ls
   10  cd cccc
   11  touch test3.txt
   12  ls
   13  cd dddd
   14  echo HELLO>test4.txt
   15  cd ..
   16  ls
   17  touch test3.txt
   18  cd ..
   19  history
takk~$ 

ディレクトリを切り替えて、ファイルを作成していく様子が伺えます。
さて、historyを実行する時は、たいていの場合は、前回実行したコマンドを再実行したい時ですから、実行したいコマンドを、5行目のvi test.txtと想定します。
まず、vi test.txtのために、7文字もあるhistoryコマンドを実行することが、キー入力の浪費かと思います。しかも、5行目の実行は、ディレクトリがaaaaに切り替わっているので、単純に「!vi」では本当の意味での実行はできません。
同様に7行目のemacs、11行目のtouch、14行目も、カレントディレクトリで実行することに意味があるため、historyコマンドの目的にはなりません。
次のケースを見てみます。

takk~$ history
    1  ls
    2  cd test
    3  tree
    4  cd aaaa
    5  cd bbbb
    6  cd ..
    7  cd cccc
    8  cd dddd
    9  cd eeee
   10  cd ..
   11  cd aaaa/bbbb
   12  cd ~/test
   13  cd cccc/dddd
   14  cd ~/test
   15  cd cccc/dddd/eeee
   16  cd ../../..
   17  history
takk~$

履歴の大部分がlsとcdで埋められています。
lsやcdは多くのユーザが手の延長のように使えるコマンドですので、わざわざhistoryを実行して使い方を思い出す必要はないかと思います。
では辿ったディレクトリを探すためには効果があるのでしょうか。
別のログを見てみましょう。
先ほどはaaaaやbbbbといった意味のないディレクトリ名でしたが、以下はlinuxのカーネルのディレクトリを辿った時のhistory結果です。

takk~$ history
    1  cd /usr/src/linux
    2  ls
    3  cd drivers/
    4  ls
    5  cd usb
    6  ls
    7  cd storage/
    8  ls
    9  cd ..
   10  ls
   11  cd ..
   12  ls
   13  cd kernel
   14  ls
   15  cd power
   16  ls
   17  cd ../time
   18  ls
   19  cd ..
   20  cd
   21  history

ディレクトリ名に意味があったところで、この履歴で一番意味があるのは1行目の/usr/src/linuxでしょうか。履歴の前後関係を辿っても、どこのディレクリにcdされたのか、直感的にわかりません。
次に、さきほどと同じディレクトリを辿ってはいるものの、cdの使い方を工夫して、さらにlsは使わない操作をした時のhistoryを確認してみましょう。

takk~$ history
    1  cd /usr/src/linux
    2  cd drivers/usb/storage/
    3  cd -
    4  cd kernel/power
    5  cd -
    6  cd kernel/time
    7  cd -
    8  history
takk~$ 

かなりすっきりとした履歴になりました。
意味のあるパス指定をしているため、辿ったディレクトリが解りやすくなっています。
では、このhistory表示を活用してみましょう。
2行目のディレクトリの合計使用サイズを知りたいとします。
そのような場合、以下のように実行すればよいです。

takk~$ du -h !2$
du -h drivers/usb/storage/
756K	drivers/usb/storage/

!2$は、2番の履歴の最後の引数の意味です。

このようにhistoryを意識すると、コマンドラインへの普段の向き合い方も変わってくるかもしれません。

コメント

タイトルとURLをコピーしました