¿Cómo puedo verificar el historial de comandos del usuario en Unix?

11

Sé que el comando 'historial' me da una lista de los comandos que he escrito en el terminal Unix.

¿Cómo puedo ver el historial de comandos de todos los usuarios que actualmente han iniciado sesión en el sistema?

3498DB
fuente
No relacionado con la programación. Te sugiero que preguntes superusuario.com .
No existe una herramienta estándar para obtener la información, por lo que creo que está relacionada con la programación (al menos en el sentido de 'scripting').
IanH

Respuestas:

10

Obtienes una lista de usuarios actualmente conectados en /var/run/utmp (ver man 5 utmp ). El historial se almacena en ~ / .history o para el usuario de bash en ~ / .bash_history. Otros shells pueden usar otros archivos de historial, por lo que no es tan fácil obtener realmente toda la información.

Además, si un usuario inicia sesión varias veces, el archivo .bash_history no siempre es confiable.

Para leer el utmp archivo hay un "frontend" llamado who, por lo que también podría escribir un script de shell para iterar sobre los usuarios actualmente conectados.

IanH
fuente
2
La historia actual se lleva a cabo en la memoria. El archivo histórico solo muestra lo que fue escrito usando history -a o similar o cuando un usuario sale de la shell.
Dennis Williamson
2
Tenga en cuenta que los nombres de archivo dados en esta respuesta son simplemente los valores predeterminados. Cada usuario podría haber establecido su propia ubicación (ver la respuesta de Joy). Si un usuario está utilizando shells diferentes, posiblemente podría almacenar sus historiales en diferentes ubicaciones no predeterminadas (por ejemplo, ~ / mybashhist, ~ / histories / ksh o somesuch). Además, tenga en cuenta que el hecho de que los datos de los usuarios se vean de esa manera podría tener implicaciones legales.
DevSolar
2
echo $HISTFILE

Luego ve ese archivo.

Joy
fuente
1
Esto funciona solo si ha obtenido previamente el entorno de ese usuario HISTFILE a otra cosa).
DevSolar