回答:
これを行うには、.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
オプションを使用します。
リストを逆順(めったに使用されないコマンドのトップ)にしたい場合は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
あなたはのカウントでジャンプを見ることができるvim
、rm
など、
sudo -i
私に与えるためなどのように動作しません-i
sudo -i
は新しいシェルを開始します。その履歴はもはやシェルの履歴ではなく、シェルの履歴にありますroot
。明らかに、これらのコマンドは多くのエッジケースでは機能しません。シェル言語用の独自のパーサーを作成せずに、可能なすべてのコマンドを処理する方法はありません。
if ($3 ~ /sudo/ && $4 !~ /^-/)
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