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



コメント