web-dev-qa-db-fra.com

Comment obtenir toutes les commandes Shell enregistrées

J'exécute Ubuntu Server 12.04 et j'essaie d'obtenir toutes les commandes Shell enregistrées. J'essaie avec rsyslog là par défaut. J'ai ajouté "*.* /var/log/everything.log" dans rsyslog.conf et 50-default.conf, mais je ne reçois que peu d'entrées (connexion, déconnexion, arrêt/démarrage du service) et je voudrais avoir tout ls, cd [path], [Wrong command].

Dois-je modifier quelque chose dans rsyslog ou définir une autre application pour qu'elle soit détaillée.

Thx SP

1
Sime

Au lieu d'utiliser bash_history, pour capturer chaque commande entrée dans le shell par vous-même et l'enregistrer dans un fichier, vous pouvez utiliser quelque chose comme la commande trap dans un script ou une fonction et placez ce code dans .bashrc.

Heureusement, exactement le script que vous voulez a été fourni par Richard Hansen il y a quelque temps dans cette réponse , et son script copie chaque commande entrée dans bash et les envoie (avec un horodatage) dans un fichier appelé .command_log par défaut. Une fois que vous avez placé son script dans votre .bashrc et ont lancé le terminal, le script de Richard écrit les commandes dans .command_log dès leur exécution, contrairement au bash_history, qui n'écrit dans le fichier qu'après la fermeture du terminal.

Le script de Richard enregistrera vos commandes comme ceci dans .command_log (bien que vous utilisiez différentes commandes pour moi):

2012-10-02T18:02:11+0100 /dev/pts/2 gksudo truecrypt
2012-10-02T21:52:03+0100 /dev/pts/2 xrandr -s 1280x1024
2012-10-03T00:16:52+0100 /dev/pts/2 mount
2012-10-03T00:17:12+0100 /dev/pts/2 udisks --unmount /dev/sdb1
2012-10-03T00:17:46+0100 /dev/pts/2 udisks --detach /dev/sdb

Je l'utilise depuis un certain temps et je trouve que le script de Richard est très utile; vous pouvez même grep le .command_log et recherchez ce que vous voulez:

grep -i udisks .command_log 

Donc, je pense que c'est probablement ce que vous voulez si vous avez besoin d'enregistrer chaque chose tapée dans bash; Je le trouve incroyablement utile.

1
user76204

Ça dépend de ce que tu veux faire. Si vous voulez surveiller tout ce que les utilisateurs exécutent, alors non, ce n'est pas facilement possible. Il existe une suite administrative de programmes appelée bos qui peut être utilisée pour surveiller tous les processus en cours d'exécution.

Si, cependant, vous voulez simplement stocker toutes les commandes que vous tapez, alors oui, cela est fait pour vous par bash. Bash stocke un historique des commandes dans ~/.bash_history. Par défaut, cependant, uniquement lorsqu'un shell se ferme, l'historique des commandes est écrit. Lisez cette page Web si vous souhaitez la personnaliser de telle sorte que la majeure partie de votre historique soit enregistrée.

1
January

Si vous voulez qu'une session entière soit enregistrée (c'est-à-dire que les deux commandes soient tapées ET les résultats de ces commandes), utilisez:

script

Sans arguments, il enregistrera les résultats dans un fichier du répertoire courant appelé "TypeScript".

script bogus.txt sera enregistré dans "bogus.txt"

Voir la page de manuel pour la liste complète des commandes man script

0
john