¿Cómo puedo hacer una lista con los comandos más utilizados en la terminal?

13

¿Cómo puedo hacer una lista con los comandos más utilizados en la terminal?

Sé que esta pregunta puede ser inútil para futuras propuestas para algunos de nosotros, pero incluso así, la lista puede ser útil cuando no recordamos un comando utilizado una o algunas veces en el pasado, cuando podemos buscar en el Fin de esta lista.

Radu Rădeanu
fuente
Cual terminal?
Elijah Lynn el

Respuestas:

20

Usaremos los registros del .bash_historyarchivo para hacer esto. El siguiente comando le dará una lista de todos los comandos para que los use con más frecuencia:

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

Si solo desea los 10 principales, debe agregar headen el comando anterior:

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

Para obtener un top específico, por ejemplo top 5, use headcon la -n 5opción:

Los 5 comandos principales

Si desea la lista en orden inverso (arriba con los comandos raramente utilizados), no use roprion por segundo sort:

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

Y, finalmente, para obtener una lista con los comandos utilizados una vez, por ejemplo, use grep ' 1 '(cambie 1con el número deseado):

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

Para manejar sudocomandos (como sudo vim foo), en lugar de solo {print $3}en el comando awk, use:

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

Entonces todo el comando se vería así:

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

Por ejemplo:

$ 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

Se puede ver el salto en cuenta para vim, rm, etc.

Radu Rădeanu
fuente
1
Es posible que desee acreditar su fuente en su respuesta: stackoverflow.com/a/68390/1210983
ohaal
3
@ohaal Lo creas o no, no sabía sobre la fuente anterior; Sinceramente, este era un problema de laboratorio de un amigo que estudiaba en Ciencias de la Computación de Iasi .
Radu Rădeanu
@muru La edición que hiciste para sudo no funciona para algo así sudo -iporque me da -iel comando
geek1011
1
@ geek1011 sudo -icomienza un nuevo shell. Esa historia ya no está en la historia de tu caparazón, sino en rootla de. Obviamente, estos comandos no funcionan para muchos casos extremos; no hay forma de manejar todos los comandos posibles sin escribir su propio analizador para lenguaje de shell.
muru
1
@ geek1011 seguro, agregue otro cheque, algo como:if ($3 ~ /sudo/ && $4 !~ /^-/)
muru
3

El siguiente comando también enumerará los top 10comandos de terminal más utilizados,

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

Comando para enumerar todos los comandos que se usan con mayor frecuencia en la terminal,

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

Fish & Bash: la pregunta no especifica un shell específico, solo 'terminal'. Cambia la cabeza al número que quieras.

Pescado

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

Este Bash parece funcionar y es un poco más corto y más fácil de entender que las otras respuestas. Me gustan las opciones largas para ayudar a la legibilidad en este tipo de ejemplos.

Golpetazo

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
fuente