
Me gustaría saber qué comando uso más en la línea de comando. Me gustaría saberlo para poder mejorar mi uso de la línea de comando. Si sé qué comando uso más, puedo leer más sobre ellos e intentar descubrir mejores formas de usarlos.
Sé que el historial mantiene una lista de todos los comandos anteriores que escribí. ¿Cómo lo procesaría para ver una lista de los 10 o 20 comandos más utilizados?
Respuesta1
Acabo de ver esta publicación enhttp://linux.byexamples.com/
Básicamente utilizas un script awk simple de una línea.
history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
Puede encontrar una explicación completa en el enlace de arriba.
Un ejemplo de salida en mi máquina es:
1 211 21.1% ls
2 189 18.9% sudo
3 58 5.8% man
4 52 5.2% cd
5 43 4.3% ping
6 40 4% apropos
7 34 3.4% less
8 22 2.2% cat
9 18 1.8% which
10 18 1.8% aspell
Respuesta2
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
El comando awk imprimirá la primera cadena de ~/.bash_history (sin mostrar opciones ni argumentos del comando), luego sort ordenará todas las líneas alfabéticamente, luego "uniq -c" eliminará las líneas duplicadas (sus comandos escritos) y las contará, y la última clasificación ordenará sus comandos según el número de conteo devuelto por uniq.
Respuesta3
Puede usar el hash
comando en su terminal, que mantiene una entrada hash de cada comando que usa junto con la cantidad de visitas y, en función de las visitas, puede ordenarlas y procesarlas.
ControlarEste artículopara más información.
Respuesta4
Los scripts en las otras respuestas solo cuentan el primer comando ejecutado en cada línea de comando; no incluyen comandos ejecutados después de las tuberías (es decir, ' | '). Por ejemplo, si esta línea estuviera en tu historial de bash:
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
luego, en el resumen devuelto de los comandos más ejecutados, 'sort' y 'uniq' y el segundo 'sort' no se incluirían, ya que no eran el primer token de la línea.
Basándose en la respuesta de nelaar, basta con dividir primero las líneas de su historial de bash en cada tubería:
sed 's/|/\n/g' ~/.bash_history | awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10