Cómo registrar cada command escrito en bash y cada operación de file

Me gustaría registrar cada command escrito en bash (por root o usuario) así como también cada operación de file.

La idea es que podría escribir herramientas que podrían interrogar este file de logging y proporcionar información muy útil.

Por ejemplo, sería genial enumerar todos los commands que se tipearon, uno por línea, con "- – -" para un intervalo de time de 8-24h y "= = = por ejemplo, 24 de junio de 2014 = = =" para> 24h de intervalo. ¡Si también elimina los duplicates dentro de una session "= = = …" aún mejor!

Eso significa que cada vez que realizo alguna tarea como "actualizar matraz / mod_wsgi / apache a Python 3.x" queda un logging, un path que puedo seguir si tengo que hacer lo mismo seis meses después.

Con el mismo fin, sería muy bueno ver qué cambios en el sistema de files ocurrieron después de instalar un package en particular. Eso me dejaría saber dónde se metieron los files de configuration.

PD: estoy en Ubuntu 14.04

Esto no es tan completo como la contabilidad real, y el usuario puede deshacerlo fácilmente, pero suponiendo que no tiene que ser un sistema de contabilidad real y que tanto BASH como rsyslog están en uso, edite el file BASH RC en todo el sistema. :

 sudo -e /etc/bash.bashrc 

Agregar al final de ese file:

 export PROMPT_COMMAND='RET_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RET_VAL]"' 

Arriba, el logger registra el time, el usuario, el command y el valor de retorno del command. Configure el logging para "local6" con un nuevo file:

 sudo -e /etc/rsyslog.d/bash.conf 

Y el contenido …

 local6.* /var/log/bash_commands.log 

Reiniciar rsyslog:

 sudo service rsyslog restart 

Cerrar session. Iniciar session. Rotación de loggings:

 sudo -e /etc/logrotate.d/rsyslog 

Hay una list de files de logging para rotar de la misma manera …

 /var/log/mail.warn /var/log/mail.err [...] /var/log/message 

Agregue el nuevo file de logging bash-commands en esa list:

 /var/log/bash_commands.log 

Guarde y reinicie / vuelva a cargar rsyslog. (La rotation eventualmente sobrescribirá los files de logging, por lo que es posible que se necesite más pensamiento o configuration).

Para ver todos los files que un package ha instalado:

 dpkg-query -L [package_name] 

Entonces, podría ejecutar algo así cuando instale el software.

 dpkg-query -L abc-package > /var/log/files_abc-package.log