¿Cómo veo cuáles son mis comandos de linux más usados?

41

Me gustaría saber qué comando uso más en la línea de comandos. Me gustaría saber para poder mejorar el uso de la línea de comandos. Si sé qué comando utilizo con mayor frecuencia, puedo leer más sobre ellos y tratar de encontrar mejores formas de usarlos.

Sé que la historia 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?

nelaaro
fuente
Sí, acabo de publicar esta pregunta para responderla. Es tan interesante que pensé que la comunidad de superusuarios realmente lo encontraría interesante.
nelaaro
1
No hay nada de malo en publicar preguntas para responderte a ti mismo. Es un marcador útil, y si va por el camino equivocado, pronto lo sabrá.
Ken

Respuestas:

52

Acabo de ver este post en http://linux.byexamples.com/

Básicamente se usa un script awk de una sola 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

Una explicación completa se puede encontrar en el enlace de arriba.

Ejemplo de fuera puesto 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
nelaaro
fuente
2
En mi OSX, la salida del historial es diferente, así que solo necesitaba cambiar los primeros $ 2 a $ 4 y esto funciona.
Liam
17
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n

El comando awk imprimirá la primera cadena desde ~ / .bash_history (no muestra opciones de comando o argumentos), luego la ordenación ordenará todas las líneas alfabéticamente, luego "uniq -c" eliminará las líneas duplicadas (sus comandos escritos) y las contará, y la última ordenación ordenará sus comandos por el número de conteo devuelto por uniq.

rems
fuente
También puedes añadir -r al final del comando para ordenarlos en el orden inverso y | head -10 Para limitar el número de resultados.
ROMANIA_engineer
10

Puedes usar el hash comando en su terminal, que mantiene una entrada de hash de cada comando que usa junto con el número de visitas y en función de las visitas que puede ordenar y procesar.

Comprobar Este artículo para más información.

Prashere
fuente
8

Para una respuesta más general, habilitar " proceso de contabilidad "en su sistema. Puede obtener no solo la frecuencia de uso, sino también estadísticas agregadas de CPU, memoria y E / S.

mpez0
fuente
6

Una adición divertida sería un gráfico de barras de los conteos:

history | tr -s ' ' | cut -d ' ' -f3 | sort | uniq -c | sort -n | tail | perl -lane 'print $F[1], "\t", $F[0], " ", "▄" x ($F[0] / 12)'

Salida:

man     226 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cat     230 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
rm      235 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
ls      240 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
aura    273 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
mv      362 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
sudo    534 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
vi      611 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
git     693 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cd      754 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

Los comandos largos compensarán el espaciado.

joelostblom
fuente
¿Alguna idea de cómo hacer que los comandos largos no compensen el espaciado?
Ashish Ahuja
@fortunate_man Desafortunadamente no, pero no estoy muy familiarizado con perl, por lo que es muy posible que obtenga una respuesta si la pregunta como una nueva pregunta. Intenté buscar la forma de imprimir un ancho fijo, pero no encontré nada inmediatamente útil, y el documentación de la función Tampoco fue de mucha ayuda. Puede que necesites usar printf o sprintf en lugar de print.
joelostblom
5

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 tuberías (es decir, '|'). Por ejemplo, si esta línea en sí estaba 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 en la línea.

Sobre la base de la respuesta de Nelaar, basta con dividir primero las líneas en su historial de bash en cada canal:

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
shaneb
fuente
2

Utilizar $ 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 para obtener una lista de sus 10 mejores comandos.

Ejemplo:

 1  272  27.2%  svn
 2  227  22.7%  cd
 3  159  15.9%  sudo
 4  57   5.7%   ll
 5  52   5.2%   mc
 6  32   3.2%   rm
 7  23   2.3%   mkdir
 8  19   1.9%   exit
 9  13   1.3%   subl
10  13   1.3%   find
Неделчо Христов
fuente
¿En qué se diferencia esto de la respuesta aceptada?
Ashish Ahuja
1

Puedes hacer lo anterior awk Conteste desde @nelaar en un buen script de bash:

#!/bin/bash
HISTFILE=~/.bash_history
set -o history
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
nettux
fuente
1

Bueno, esta es una versión modificada del comando "Неделчо Христов" copiado y pegado aquí ... si ha asegurado o estampado la fecha en su historial de bash, tendrá una salida con fallas.

Esto te hará mejor usando esto:

awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' .bash_history | grep -v "#" | sort -nr | nl | column -c3 -s " " -t | head -n 20
Th3_4n3r
fuente