Wie kann ich eine Liste mit den am häufigsten verwendeten Befehlen im Terminal erstellen?

13

Wie kann ich eine Liste mit den am häufigsten verwendeten Befehlen im Terminal erstellen?

Ich weiß, dass diese Frage für zukünftige Vorschläge für einige von uns ungewöhnlich sein kann, aber auch so kann die Liste nützlich sein, wenn wir uns nicht an einen Befehl erinnern, der einmal oder einige Male in der Vergangenheit verwendet wurde, wenn wir nach dem suchen können Ende dieser Liste.

Radu Rădeanu
quelle
Welches Terminal?
Elijah Lynn

Antworten:

20

Wir werden die Datensätze aus der .bash_historyDatei verwenden, um dies zu tun. Mit dem nächsten Befehl erhalten Sie eine Liste aller Befehle, damit Sie sie am häufigsten verwenden:

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

Wenn Sie nur Top 10 wollen, müssen Sie headbei dem obigen Befehl hinzufügen :

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

Um ein bestimmtes Top zu erhalten, zum Beispiel Top 5, verwenden Sie headmit der -n 5Option:

Top 5 Befehle

Wenn Sie möchten, dass die Liste in umgekehrter Reihenfolge rangezeigt wird (oben mit den selten verwendeten Befehlen), verwenden Sie oprion nicht für den zweiten Schritt sort:

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

Und schließlich, um eine Liste mit den Befehlen zu erhalten, die zum Beispiel einmal verwendet wurden, verwenden Sie grep ' 1 '(ändern Sie 1mit der gewünschten Nummer):

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

Um mit sudoBefehlen (wie sudo vim foo) umzugehen , verwenden Sie anstelle des {print $3}Befehls awk:

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

Der gesamte Befehl würde also so aussehen:

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

Beispielsweise:

$ 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

Sie können den Sprung in Zählungen für sehen vim, rmusw.

Radu Rădeanu
quelle
1
Vielleicht
ohaal
3
@ohaal Ob Sie es glauben oder nicht, ich wusste nichts über die obige Quelle. Mit freundlichen Grüßen, dies war ein Laborproblem eines Freundes, der an der Informatik in Iasi studierte .
Radu Rădeanu
@muru Die Bearbeitung, die Sie für sudo vorgenommen haben, funktioniert nicht für etwas wie, sudo -iweil sie mir -iden Befehl gibt
geek1011
1
@ geek1011 sudo -istartet eine neue Shell. Diese Geschichte ist nicht mehr in der Geschichte deiner Muschel, sondern in rootder. Offensichtlich funktionieren diese Befehle nicht für viele Randfälle. Es gibt keine Möglichkeit, mit allen möglichen Befehlen umzugehen, ohne einen eigenen Parser für die Shell-Sprache zu schreiben.
muru
1
@ Geek1011 sicher, fügen Sie einen weiteren Scheck, etwas wie:if ($3 ~ /sudo/ && $4 !~ /^-/)
muru
3

Unter Befehl werden auch die top 10am häufigsten verwendeten Terminalbefehle aufgelistet.

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

Befehl, um alle Befehle aufzulisten, die am häufigsten im Terminal verwendet werden.

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

Fish & Bash - Die Frage gibt keine bestimmte Shell an, nur "Terminal". Ändern Sie den Kopf auf die gewünschte Nummer.

Fisch

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

Dieser Bash scheint zu funktionieren und ist etwas kürzer und verständlicher als die anderen Antworten. Ich mag die langen Optionen, die die Lesbarkeit in solchen Beispielen verbessern.

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
Elijah Lynn
quelle