Come posso creare un elenco con i comandi più utilizzati nel terminale?


13

Come posso creare un elenco con i comandi più utilizzati nel terminale?

So che questa domanda potrebbe non essere utile per eventuali proposte future per alcuni di noi, ma anche così, l'elenco può essere utile quando non ricordiamo un comando usato una o alcune volte in passato, quando possiamo cercare il fine di questo elenco.


Quale terminale?
Elia Lynn,

Risposte:


20

Useremo i record dal .bash_historyfile per fare questo. Il prossimo comando ti fornirà un elenco di tutti i comandi in modo da utilizzarli più spesso:

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

Se si desidera solo la top 10, è necessario aggiungere headal comando sopra:

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

Per ottenere un top specifico, ad esempio il top 5, utilizzare headcon l' -n 5opzione:

Primi 5 comandi

Se si desidera l'elenco in ordine inverso (in alto con i comandi usati raramente), non usare roprion per il secondo sort:

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

E infine per ottenere un elenco con i comandi utilizzati una volta, ad esempio, utilizzare grep ' 1 '(cambia 1con il numero desiderato):

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

Per gestire i sudocomandi (come sudo vim foo), anziché semplicemente {print $3}nel comando awk, utilizzare:

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

Quindi l'intero comando sarebbe simile a:

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

Per esempio:

$ 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

Si può vedere il salto di conteggi per vim, rmecc


1
Potrebbero voler accreditare la vostra fonte nella tua risposta: stackoverflow.com/a/68390/1210983
ohaal

3
@ohaal Credi o no, non sapevo della fonte sopra; sinceramente questo era un problema di laboratorio di un amico che studiava all'Informatica di Iasi .
Radu Rădeanu,

@muru La modifica che hai fatto per sudo non funziona per qualcosa di simile sudo -iperché mi dà -icome comando
geek1011

1
@ geek1011 sudo -iavvia una nuova shell. Quella storia non è più nella storia della tua shell, ma in quella rootdi. Ovviamente questi comandi non funzionano per molti casi limite; non c'è modo di gestire tutti i possibili comandi senza scrivere il proprio parser per il linguaggio shell.
muru,

1
@geek1011 certo, aggiungi un altro assegno, qualcosa del tipo:if ($3 ~ /sudo/ && $4 !~ /^-/)
muru,

3

Il comando seguente elenca anche i top 10comandi del terminale più utilizzati,

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

Comando per elencare tutti i comandi che vengono usati più spesso nel terminale,

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

2

Fish & Bash - La domanda non specifica una shell specifica, ma solo "terminale". Cambia testa al numero che desideri.

Pesce

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

Questo Bash sembra funzionare ed è un po 'più breve e più facile da capire rispetto alle altre risposte. Mi piacciono le lunghe opzioni per aiutare la leggibilità in questi tipi di esempi.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.