L’historique des commandes de bash est très pratique, mais il ne stocke que les commandes. Il est impossible de de savoir quand les commandes ont été lancées, ni même de savoir par qui dans le cas de serveurs où l’on accède via ssh.

Mais il est facile de remédier à ce petit problème grâce aux variables de configuration du bash.

Enregistrer l’heure pour chaque commande

La méthode la plus simple et la plus propre est de modifier la variable HISTTIMEFORMAT.

Export …

Echo ... > .bashrc

Une fois cette variable remplie, bash va ajouter avant la commande une ligne contenant la date et l’heure de lancement.

#19374738836 [Timestamp du lancement de la commande]
[Commande]

La commande history gère parfaitement cette datation sans gêner la recherche et la réutilisation des commandes.

History

….

Stocker plus d’information

Si l’on veux stocker plus d’informations, HISTTIMEFORMAT ne peux plus nous servir. Par exemple, nous voudrions savoir depuis quel adresse ip l’utilisateur s’est connecté.

Récupération de l’adresse ip :

echo "[${SSH_CLIENT%% *}]"

L’une des solutions est de stocker toutes les informations dans le fichier bash_history mais cela empêche la réutilisation simple des commandes car il faut effacer les informations en trop.

L’idée est de stocker les informations dans un autre fichier tout en continuant à alimentant le fichier d’historique

Proposition

Pour éviter les problème d’utilisation de l’historique tout en gardant l’horodatage et l’IP pour chacune des action, je propose de stocker ces informations dans 2 fichiers différents :

  • Le fichier d’historique standard avec uniquement les commandes pour la recherche bash</li>
  • Un fichier d’historique supplémentaire qui contiendrait aussi les commandes mais préfixées de la date et de l’IP</li>

Pour se faire, la variable PROMPT_COMMAND pourrait ressembler à ça :

PROMPT_COMMAND='set_bash_prompt; history -a >(tee -a "${HISTFILE}" | ( read cmd ; echo "[${SSH_CLIENT%% *}] [$(date +"%Y-%m-%d %T")] ${cmd}" >> "${HISTFILE}_info"))' ;

Sous Debian/Ubuntu/OpenSuse, pour que tous les comptes l’utilisent, on place cette commande dans le fichier :

/etc/profile.d/prompt-command.sh