ターミナルで最も使用されるコマンドのリストを作成するにはどうすればよいですか?


13

ターミナルで最も使用されるコマンドのリストを作成するにはどうすればよいですか?

この質問は私たちの一部の将来の提案には役に立たないかもしれないことを知っていますが、このように、リストは過去に一度または数回使用されたコマンドを覚えていない場合、またはこのリストの終わり。


どの端末ですか?
イライジャ・リン

回答:


20

これを行うには、.bash_historyファイルのレコードを使用します。次のコマンドは、最も頻繁に使用するために、すべてのコマンドのリストを提供します。

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr

トップ10のみが必要な場合はhead、上記のコマンドで追加する必要があります。

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head

特定のトップ、たとえばトップ5を取得するにはhead、with -n 5オプションを使用します。

上位5つのコマンド

リストを逆順(めったに使用されないコマンドのトップ)にしたい場合はr、2番目にoprionを使用しないでくださいsort

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -n

そして最後に、たとえば一度使用したコマンドのリストを取得するには、次を使用しますgrep ' 1 '1目的の番号に変更します)。

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | grep ' 1 '

awkコマンドだけでなく、sudoコマンド(などsudo vim foo)を処理するに{print $3}は、次を使用します。

{if($3 ~ /sudo/) print $4; else print $3}

したがって、コマンド全体は次のようになります。

history | awk 'BEGIN {FS="[ \t]+|\\|"} {if($3 ~ /sudo/) print $4; else print $3}' | sort | uniq -c | sort -nr

例えば:

$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
    284 vim
    260 git
    187 find
    174 man
    168 echo
    149 rm
    134 awk
    115 pac
    110 sudo
    102 l

$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {if($3 ~ /sudo/) print $4; else print $3}' | sort | uniq -c | sort -nr | head
    298 vim
    260 git
    189 find
    174 man
    168 echo
    153 rm
    134 awk
    115 pac
    102 l
     95 cd

あなたはのカウントでジャンプを見ることができるvimrmなど、


1
あなたの答えであなたのソースを信用したい場合があります:stackoverflow.com/a/68390/1210983
ohaal

3
@ohaal信じられないかもしれませんが、上記のソースについては知りませんでした。心からこれはIasiのComputer Scienceで勉強している友人の実験室の問題でした。
ラドゥラデアヌ

@muru sudoに対して行った編集は、コマンドとしてsudo -i私に与えるためなどのように動作しません-i
-geek1011

1
@ geek1011 sudo -iは新しいシェルを開始します。その履歴はもはやシェルの履歴ではなく、シェルの履歴にありますroot。明らかに、これらのコマンドは多くのエッジケースでは機能しません。シェル言語用の独自のパーサーを作成せずに可能なすべてのコマンドを処理する方法はありません。
ムル

1
@ geek1011確かに、次のような別のチェックを追加しますif ($3 ~ /sudo/ && $4 !~ /^-/)
。– muru

3

以下のコマンドは、top 10最も頻繁に使用される端末コマンドもリストします。

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

ターミナルで最も頻繁に使用されるすべてのコマンドをリストするコマンド、

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn

2

Fish&Bash-質問は特定のシェルを指定せず、単に「ターミナル」を指定します。好きな番号に頭を変えてください。

history | awk '{print $1}' | sort | uniq --count | sort --numeric-sort --reverse | head -10

517 git
314 drush
197 sudo
171 cd
115 man
103 echo
 95 vi
 81 dig
 67 set
 66 ls

このBashは機能しているように見え、他の回答よりも少し短く、理解しやすいです。これらのタイプの例で読みやすくするための長いオプションが気に入っています。

バッシュ

history | awk '{print $2}' | sort | uniq --count | sort --numeric-sort --reverse | head -10

73 drush
72 exit
65 sudo
46 g
40 echo
35 ll
34 tmux
30 history
30 fish
27 mux
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.