
コマンドラインで最もよく使用するコマンドを知りたいです。 知りたいのは、コマンドラインの使用を改善できるようにするためです。 最もよく使用するコマンドがわかれば、そのコマンドについてさらに詳しく読み、よりよい使用方法を見つけ出すことができます。
履歴には、以前に入力したすべてのコマンドのリストが保存されていることは知っています。最もよく使用される上位 10 または 20 のコマンドのリストを表示するには、どのように処理すればよいでしょうか。
答え1
この投稿を見たのは参考:
基本的には、シンプルな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
答え2
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
awk コマンドは、~/.bash_history から最初の文字列を出力します (コマンド オプションや引数は表示されません)。次に、sort はすべての行をアルファベット順に並べ替えます。次に、「uniq -c」は重複した行 (入力したコマンド) を削除してカウントし、最後の sort は、uniq によって返されたカウント数でコマンドを並べ替えます。
答え3
ターミナルで コマンドを使用するとhash
、使用したすべてのコマンドのハッシュ エントリがヒット数とともに保持され、ヒットに基づいてコマンドを分類して処理できます。
チェックこの記事詳細については。
答え4
他の回答のスクリプトでは、各コマンド ラインで実行された最初のコマンドのみがカウントされます。パイプ (つまり ' | ') の後に実行されたコマンドは含まれません。たとえば、この行自体が 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