En UNIX, ¿cómo encontrar los comandos más utilizados en la historia de Unix?

8

En UNIX, ¿cómo encontrar los comandos más utilizados en la historia?

swetha
fuente
Creo que esto está fuera de tema aquí, pero Google muestra varias listas buenas como referencia. Obviamente, el uso variará según la distribución y la disponibilidad de los comandos, así como por el usuario, su propósito y su conocimiento de otros comandos, pero ciertamente hay algunos que flotan en la parte superior y aparecen en todas las listas sobre el tema.
Caleb
77
¿Te refieres a "archivo de historial de comandos de shell" o "historial de Unix"?
alex

Respuestas:

11

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, lsy ls -alh /tmp/foo/bar/*tar.bzson 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.

Tok
fuente
Necesitaba agregar un adicional sortantes uniqpara obtener un conteo preciso ya que solo verifica las líneas adyacentes:history | cut -d' ' -f4- | cut -d' ' -f1 | sort | uniq -c | sort -n
nocash
4

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
Nidal
fuente
4

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 lastcommpara el registro en ejecución y sapara 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 -ndarí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.

Vucar Timnärakrul
fuente
2

Los 20 comandos CLI más utilizados:

history |  cut -c7- | sort  | uniq -c | sort -nr | head -n 20
Adrian
fuente
1

Puede usar un solo comando de corte:

history | cut -c 7-100  | sort  | uniq -c | sort -nr
usuario78124
fuente
1

Si es solo para la sesión actual, entonces hashsin argumentos.

PSkocik
fuente