コマンドラインで最もよく使用するコマンドを教えてください。コマンドラインの使い方を改善できるように知りたいのですが。最もよく使用するコマンドがわかっている場合は、それらのコマンドの詳細を読んで、それらを使用するためのより良い方法を見つけることができます。
私が入力した以前のすべてのコマンドのリストが履歴に保存されていることは知っています。最も使用頻度の高いコマンドのトップ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から返されたカウント数でコマンドを並べ替えます。
ターミナルでhash
コマンドを使用できます。これにより、使用するすべてのコマンドのハッシュエントリがヒット数とともに保持され、ヒットに基づいてそれらを整理して処理できます。
詳細は この記事 を確認してください。
より一般的な答えを得るには、システムで「 プロセスアカウンティング 」を有効にします。使用頻度だけでなく、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 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
長いコマンドは間隔をオフセットします。
$ 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
これは、ここでコピーして貼り付けたコマンド「НеделчоХристов」の修正バージョンです... bash履歴を保護または日付スタンプした場合、出力にエラーが発生します。
これはこれを使用してよりよくします:
awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' .bash_history | grep -v "#" | sort -nr | nl | column -c3 -s " " -t | head -n 20
上記のawk
の回答を@nelaarからNice bashスクリプトに作成できます。
#!/bin/bash
HISTFILE=~/.bash_history
set -o history
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
Oh My Zshを使用している場合!この機能はすでに存在しています。入力するだけ
zsh_stats
上位20のコマンドとそれらが実行された回数のリストを取得します。