Jak mogę utworzyć listę z najczęściej używanymi poleceniami w terminalu?

13

Jak mogę utworzyć listę z najczęściej używanymi poleceniami w terminalu?

Wiem, że to pytanie może być nieużyteczne w przypadku jakichkolwiek przyszłych propozycji dla niektórych z nas, ale mimo to lista może być przydatna, gdy nie pamiętamy polecenia użytego raz lub kilka razy w przeszłości, gdy możemy wyszukiwać w koniec tej listy.

Radu Rădeanu
źródło
Który terminal?
Elijah Lynn

Odpowiedzi:

20

W tym celu wykorzystamy rekordy z .bash_historypliku. Następne polecenie wyświetli listę wszystkich poleceń w kolejności ich użycia:

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

Jeśli chcesz tylko 10 najlepszych, musisz dodać headpolecenie powyżej:

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

Aby uzyskać konkretny szczyt, na przykład Top 5, użyj headz -n 5opcji:

5 najlepszych poleceń

Jeśli chcesz listę w odwrotnej kolejności (na górze z rzadko używanymi poleceniami), nie używaj roprion na sekundę sort:

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

I na koniec, aby uzyskać listę z poleceniami użytymi raz, na przykład, użyj grep ' 1 '(zmień 1na żądany numer):

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

Aby radzić sobie z sudopoleceniami (jak sudo vim foo), zamiast tylko {print $3}w poleceniu awk, użyj:

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

Całe polecenie wyglądałoby więc tak:

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

Na przykład:

$ 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

Widać skok liczy vim, rmitp

Radu Rădeanu
źródło
1
Może chcesz podać źródło w odpowiedzi: stackoverflow.com/a/68390/1210983
ohaal
3
@ohaal Wierzcie lub nie, nie wiedziałem o powyższym źródle; szczerze mówiąc, był to problem laboratoryjny znajomego, który studiował na kierunku informatyka w Iasi .
Radu Rădeanu,
@muru Edycja dokonana dla sudo nie działa dla czegoś takiego, sudo -iponieważ daje mi -ijako polecenie
geek1011
1
@ geek1011 sudo -iuruchamia nową powłokę. Ta historia nie jest już w historii twojej powłoki, ale w root. Oczywiście te polecenia nie działają w wielu przypadkach brzegowych; nie ma sposobu na radzenie sobie ze wszystkimi możliwymi poleceniami bez napisania własnego parsera dla języka powłoki.
mur
1
@ geek1011 na pewno dodaj kolejny czek, coś w stylu:if ($3 ~ /sudo/ && $4 !~ /^-/)
muru,
3

Poniższa komenda zawiera również listę top 10najczęściej używanych komend terminalowych,

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

Polecenie, aby wyświetlić listę wszystkich poleceń, które są najczęściej używane w terminalu,

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn
Avinash Raj
źródło
2

Fish & Bash - pytanie nie określa konkretnej powłoki, a jedynie „terminal”. Zmień głowę na dowolną liczbę.

Ryba

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

Ten Bash wydaje się działać i jest nieco krótszy i łatwiejszy do zrozumienia niż inne odpowiedzi. Lubię długie opcje, aby poprawić czytelność w tego typu przykładach.

Grzmotnąć

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
źródło