En UNIX, ¿cómo encontrar los comandos más utilizados en la historia?
En UNIX, ¿cómo encontrar los comandos más utilizados en la historia?
Respuestas:
Más bien depende de lo que pretendes por 'comando'. Desde un punto de vista de un comando es simplemente un ejecutable llamado desde la línea de comandos, por lo tanto, ls
y ls -alh /tmp/foo/bar/*tar.bz
son a la vez el comando ls
. Otra perspectiva es que un comando es la suma de sus partes, lo que significa que el ejemplo anterior es 2 comandos distintos.
Si su intención es contar comandos completamente únicos en el historial, puede ejecutar: history | cut -d' ' -f4- | uniq -c | sort -n
Tenga en cuenta que esto se probó en un sistema Debian, la sintaxis de salida de su comando de historial puede variar ligeramente. Ajuste el número '4' en el comando para seleccionar columnas alternativas.
Si desea considerar solo el primer comando sin argumentos, puede ejecutar: history | cut -d' ' -f4- | cut -d' ' -f1 | uniq -c | sort -n
Para incluir los argumentos pero no los comandos encadenados o canalizados que siguen, puede ejecutar: history | cut -d ' ' -f4- | cut -d'|' -f1 | uniq -c | sort -n
Tenga en cuenta que cada uno de estos ordena el número de comandos numéricamente con la frecuencia más alta que aparece al final.
sort
antes uniq
para obtener un conteo preciso ya que solo verifica las líneas adyacentes:history | cut -d' ' -f4- | cut -d' ' -f1 | sort | uniq -c | sort -n
He visto respuestas vucar y tok , son muy útiles, pero también puedes usar la herramienta increíble awk
:
si desea una lista de comandos que usa con más frecuencia:
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
para encontrar el comando más usado:
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head -1
para mí fue vi
:
94 vi
Otro enfoque sería utilizar la contabilidad de procesos BSD , que también está disponible en Linux (aunque no sé si está habilitado de forma predeterminada). Básicamente mantiene una pestaña de todos los programas que se ejecutan (y algunas otras medidas, como el tiempo de CPU consumido, etc.) mientras la contabilidad esté activa. A partir de ahí, hay algunas estadísticas agregadas disponibles, entre otras: una especie de lista de todos los programas que se ejecutan en el sistema, ordenados por etc. número máximo de usos.
Los comandos a buscar son lastcomm
para el registro en ejecución y sa
para las estadísticas agregadas. Volviendo a la pregunta original, suponiendo que el sistema en cuestión hubiera tenido habilitada la contabilidad desde que se instaló, luego sa -n
daría una lista de todos los comandos ejecutados en el sistema (para todos los usuarios), ordenados por frecuencia. Para las tuberías, cada parte de la tubería, por supuesto, se contará por separado, ya que cada parte comprende un nuevo proceso que se bifurca.
Para más detalles, la revista Linux tiene un artículo que explica el funcionamiento. Yo mismo tuve la idea de la guía de NetBSD ; Muchos de los consejos de administración más genéricos no son específicos de NetBSD, pero también se aplican a otros sistemas Unix.
Puede usar un solo comando de corte:
history | cut -c 7-100 | sort | uniq -c | sort -nr