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を意識すると、コマンドラインへの普段の向き合い方も変わってくるかもしれません。
コメント