コマンドラインで最も使用するコマンドを知りたいのですが。知りたいので、コマンドラインの使用を改善できます。どのコマンドを最もよく使用するかがわかっている場合は、それらについての詳細を読んで、それらを使用するより良い方法を見つけてください。
履歴には、以前に入力したすべてのコマンドのリストが保持されます。最もよく使用される上位10または20個のコマンドのリストを表示するには、どのように処理しますか。
コマンドラインで最も使用するコマンドを知りたいのですが。知りたいので、コマンドラインの使用を改善できます。どのコマンドを最もよく使用するかがわかっている場合は、それらについての詳細を読んで、それらを使用するより良い方法を見つけてください。
履歴には、以前に入力したすべてのコマンドのリストが保持されます。最もよく使用される上位10または20個のコマンドのリストを表示するには、どのように処理しますか。
回答:
この投稿はhttp://linux.byexamples.com/で見ました。
基本的には、単純な1行のawkスクリプトを使用します
history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
完全な説明は、上記のリンクで見つけることができます。
私のマシンに出力される例は次のとおりです。
1 211 21.1% ls
2 189 18.9% sudo
3 58 5.8% man
4 52 5.2% cd
5 43 4.3% ping
6 40 4% apropos
7 34 3.4% less
8 22 2.2% cat
9 18 1.8% which
10 18 1.8% aspell
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
awkコマンドは〜/ .bash_historyの最初の文字列(コマンドオプションや引数を表示しない)を出力し、sortはすべての行をアルファベット順に並べ替え、次に "uniq -c"は重複行(入力したコマンド)を削除してカウントします。最後の並べ替えでは、uniqが返すカウント数でコマンドを並べ替えます。
-r
コマンドの最後に追加して、逆の順序で並べ替え| head -10
、結果の数を制限することもできます。
より一般的な回答については、システムで「プロセスアカウンティング」を有効にしてください。使用頻度だけでなく、CPU、メモリ、およびI / Oの統計を集計できます。
他の回答のスクリプトは、各コマンドラインで実行された最初のコマンドのみをカウントします。パイプの後に実行されるコマンドは含まれません(例: '|')。たとえば、この行自体がbash履歴にあった場合:
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
返された最も実行されたコマンドの要約には、「sort」と「uniq」、および2番目の「sort」は含まれません。これらは行の最初のトークンではないためです。
nelaarからの回答に基づいて、最初にすべてのパイプでbash履歴の行を分割するだけで十分です。
sed 's/|/\n/g' ~/.bash_history | awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
楽しい追加は、カウントの棒グラフです。
history | tr -s ' ' | cut -d ' ' -f3 | sort | uniq -c | sort -n | tail | perl -lane 'print $F[1], "\t", $F[0], " ", "▄" x ($F[0] / 12)'
出力:
man 226 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cat 230 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
rm 235 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
ls 240 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
aura 273 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
mv 362 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
sudo 534 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
vi 611 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
git 693 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cd 754 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
長いコマンドは間隔をオフセットします。
printf
またはのsprintf
代わりに使用する必要がある場合がありますprint
。
使用$ history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
して、上位10個のコマンドのリストを取得します。
例:
1 272 27.2% svn
2 227 22.7% cd
3 159 15.9% sudo
4 57 5.7% ll
5 52 5.2% mc
6 32 3.2% rm
7 23 2.3% mkdir
8 19 1.9% exit
9 13 1.3% subl
10 13 1.3% find