Comment save chaque command tapée dans bash et chaque opération de file

Je voudrais save chaque command tapée dans bash (par la racine ou l'user) ainsi que chaque opération de file.

L'idée est que je pourrais écrire des outils qui pourraient interroger ce file journal et fournir des informations très utiles.

Par exemple, il serait bon de listr toutes les commands déjà tapées, une par ligne, avec "- – -" pour un intervalle de time de 8-24h et "= = = 24 juin 2014 = = =" pour> 24h. Si cela éliminait également les duplicates dans une session "= = = …", mieux encore!

Cela signifierait que chaque fois que j'accomplirais une tâche telle que «upgrade flask / mod_wsgi / apache à Python 3.x», un dossier est laissé derrière, un path que je peux prendre si je dois faire la même chose six mois plus tard.

Dans le même but, il serait très agréable de voir les modifications apscopes au système de files après l'installation d'un package particulier. Cela me ferait savoir où les files de configuration ont été mis.

PS je suis sur Ubuntu 14.04

Ce n'est pas aussi complet que la comptabilité réelle, et il peut être annulé facilement par un user, mais en supposant qu'il ne doit pas être un véritable système de comptabilité et que BASH et rsyslog sont utilisés, éditez le file BASH RC à l'échelle du système :

 sudo -e /etc/bash.bashrc 

Ajouter à la fin de ce file:

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

Au-dessus, l' logger enregistre l'heure, l'user, la command et la valeur de return de la command. Configurez la journalisation pour "local6" avec un nouveau file:

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

Et le contenu …

 local6.* /var/log/bash_commands.log 

Redémarrez rsyslog:

 sudo service rsyslog restart 

Connectez – Out. Connectez-vous. Rotation du journal:

 sudo -e /etc/logrotate.d/rsyslog 

Il y a une list de files journaux à tourner de la même façon …

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

Ajoutez le nouveau file journal bash-commands dans cette list:

 /var/log/bash_commands.log 

Enregistrez et redémarrez / rechargez rsyslog. (La rotation finira par écraser les files journaux, il faudra donc plus de reflection ou de configuration.)

Pour voir tous les files qu'un package a installés:

 dpkg-query -L [package_name] 

Vous pouvez donc exécuter quelque chose comme ça lorsque vous installez un logiciel.

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