最もよく使用されるlinuxコマンドを確認するにはどうすればよいですか?


43

コマンドラインで最も使用するコマンドを知りたいのですが。知りたいので、コマンドラインの使用を改善できます。どのコマンドを最もよく使用するかがわかっている場合は、それらについての詳細を読んで、それらを使用するより良い方法を見つけてください。

履歴には、以前に入力したすべてのコマンドのリストが保持されます。最もよく使用される上位10または20個のコマンドのリストを表示するには、どのように処理しますか。


はい、答えるためにこの質問を投稿しました。スーパーユーザーのコミュニティは本当に面白いと思うのですが、それはとても興味深いです。
-nelaaro

1
自分自身に答えるための質問を投稿しても何も問題はありません。便利なブックマークを作成し、間違った方向に進んでいる場合はすぐにそれについて聞くことができます!
ケン

回答:


59

この投稿は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

3
私のOSXでは、履歴の出力が異なるため、最初の$ 2を$ 4に変更するだけで機能します。
リアム

17
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n

awkコマンドは〜/ .bash_historyの最初の文字列(コマンドオプションや引数を表示しない)を出力し、sortはすべての行をアルファベット順に並べ替え、次に "uniq -c"は重複行(入力したコマンド)を削除してカウントします。最後の並べ替えでは、uniqが返すカウント数でコマンドを並べ替えます。


-rコマンドの最後に追加して、逆の順序で並べ替え| head -10、結果の数を制限することもできます。
ROMANIA_engineer 16

10

hashターミナルでコマンドを使用できます。これにより、使用するすべてのコマンドのハッシュエントリがヒット数とともに保持され、ヒットに基づいてそれらをソートして処理できます。

詳細についてはこの記事参照してください。



6

他の回答のスクリプトは、各コマンドラインで実行された最初のコマンドのみをカウントします。パイプの後に実行されるコマンドは含まれません(例: '|')。たとえば、この行自体が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

6

楽しい追加は、カウントの棒グラフです。

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 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

長いコマンドは間隔をオフセットします。


間隔をオフセットしない長いコマンドを作成する方法に関するアイデアはありますか?
アシッシュア

@fortunate_man残念ながらそうではありませんが、私はperlにあまり詳しくないので、それを新しい質問として聞けば、答えが得られるかもしれません。固定幅の印刷方法を検索しようとしましたが、すぐに役立つものは見つかりませんでした。また、関数のドキュメントもあまり役に立ちませんでした。printfまたはのsprintf代わりに使用する必要がある場合がありますprint
-joelostblom

2

使用$ 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

これは受け入れられた答えとどう違うのですか?
アシシュ・アフジャ

1

上記のawk回答を@nelaarから素敵な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

1

これは、「НеделчоХристов」コマンドの修正バージョンです。ここにコピーして貼り付けます。

これにより、これを使用したほうがうまくいきます。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.