ふと,これまで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コマンドを実行するには\が必要だからです.