ふと,これまでzshの上でどんなコマンドをどれだけ実行してきたのかが,気になってきました.
コマンド履歴を保存しているファイルは,$HISTFILE です.デフォルトは ~/.zsh_history だったかな.あるいは $ZDOTDIR/.zsh_history か.
1行を取り出してみると,こんな感じ.
: 1306063912:0;emacs -nw
ということは,最初の;までを取り除いてから,最初の空白以降を取り除けば,コマンド名だけが残るわけです.
コマンド名を取り出し,数を数えてソートする,ワンライナーを書きました.
sed -e 's/^[^;]*;//' -e 's/ .*$//' $HISTFILE | sort | uniq -c | sort -nr -k 1
大量に出てきます.しかも終わりのほうの出力が変です.コマンド名の直後の空白を,ちゃんと認識してくれていないような.
細かいことは忘れることにして,上位20個のコマンド名を出すことにします.
$ sed -e 's/^[^;]*;//' -e 's/ .*$//' $HISTFILE | sort | uniq -c | sort -nr -k 1 | head -n 20
365 ls
362 cd
339 svn
195 lv
126 \rm
120 cat
112 cp
94 for
72 mkdir
69 grep
66 mv
55 rsync
54 ruby
50 man
49 locate
39 wget
39 tar
35 which
34 ln
33 w3m「rm」ではなく「\rm」となっていますが,.zshrc.zhsrcの中で
alias rm='echo rm'
と別名定義をしていて,素のrmコマンドを実行するには\が必要だからです.