Pour avoir l’heure et la date en face de chaque commande de l’historique, il suffit de définir le paramètre HISTTIMEFORMAT dans ~/.bash_profile:
echo 'HISTTIMEFORMAT="%Y/%m/%d @ %T "' >> ~/.bash_profile
Puis on recharge la configuration:
source ~/.bash_profile
%d = Jour
%m = Mois
%Y = Année sur 4 chiffres
%T = Heure complète
Sur un serveur où plusieurs administrateurs pourraient ce connecter, on peut rediriger la sortie de la commande history dans un fichier spécifique avec une rotation.
Ainsi il faut ajouter dans /etc/profile les lignes suivants:
# envoyer la commande dans syslog pour chaque commande AVANT exécution
trap 'logger -i -p local5.info -t bash "$USER $(tty): $(fc -ln -1)"' DEBUG
Ou
# envoyer la commande dans syslog pour chaque commande APRES exécution
PROMPT_COMMAND='logger -i -p local5.info -t bash "$USER $(tty): $(history 1)"'
# fc ne marche pas correctement dans PROMPT_COMMAND
Puis on met en place une redirection des logs dans un fichier à part, pour cela créer le fichier shell.conf:
vi /etc/rsyslog.d/shell.conf
Et on y met:
local5.* -/var/log/shell.log
Le tiret (-) devant le fichier de log permet une écriture asynchrone (pas forcément nécessaire, car ça ne risque pas d’impacter les perf, mais bon…)
Il ne reste plus qu’à créer un fichier de configuration pour logrotate:
vi /etc/logrotate.d/shell
Et on y met ça:
/var/log/shell.log {
rotate 30
daily
missingok
notifempty
delaycompress
compress
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
create 640 root adm
}
Une fois que tout est prêt, il n’y a plus qu’a relancer rsyslog :
/etc/init.d/rsyslog restart