La commande history permet d’afficher ou de manipuler la liste des dernières commandes que vous avez exécutées depuis un terminal donné (plus précisément un « shell
donné »).
La commande history affiche l’historique avec les numéros de ligne, en préfixant chaque entrée modifiée par un « * ».
Comment on utilise la commande « history » ?
Très simplement depuis votre terminal :
history
Exemple d’affichage :
1 ls
2 history
Avec un argument N, history répertorie uniquement les N dernières entrées :
history 1
Ce qui donnera :
22 history 1
Aide sur la commande history
L’aide complète s’obtient grâce à :
help history
ou
tldr history
Récupérer l’historique des commandes en vu d’adapter pour un script
Pour construire un script avec tout ou parti de l’historique, il faut faire un peu de nettoyage en supprimer le numéro d’ordre sur chacune des lignes.
Vous pouvez utiliser sed pour supprimer la partie contenant le numéro de la commande :
history | sed -E 's,^[[:blank:]]+[[:digit:]]+[[:blank:]]+(.*)$,\1,g'
Solution utilisant les classes [:blank:]
et [:digit:]
.
history | sed -E 's,^\s+[[:digit:]]+\s+(.*)$,\1,g'
Solution utilisant le sélecteur \s
et la classe [:digit:]
.
Pour construire effectivement un script bash, vous devez mettre tout ou partir de l’historique dans un fichier (à l’aide de la redirection >
) puis rendre ce fichier exécutable :
history | sed -E 's,^[[:blank:]]+[[:digit:]]+[[:blank:]]+(.*)$,\1,g' >exemple-de-script.sh
chmod +x exemple-de-script.sh
Ensuite éditer le fichier ainsi créer pour nettoyer ce qui n’est pas nécessaire.
Récupérer un exemplaire de chacune des commandes
Un autre usage intéressant avec history est de vous constituer une documentation sur des commandes que vous ne maîtriser pas complètement ou qui sont longue à écrire…
Pour vous constituer une sorte d’index des commandes qui vous sont utiles vous pouvez utiliser le tri (sort) puis la suppression des doublons (uniq) :
history |
sed -E 's,^[[:blank:]]+[[:digit:]]+[[:blank:]]+(.*)$,\1,g' |
sort |
uniq
history | sed -E 's,^\s+[[:digit:]]+\s+(.*)$,\1,g' | sort | uniq
Là encore pour mettre le résultat dans un fichier, vous pouvez utiliser la redirection de la sortie standard (>
) :
history | sed -E 's,^[[:blank:]]+[[:digit:]]+[[:blank:]]+(.*)$,\1,g' | sort | uniq >ma_documentation.txt
On peut affiner un peu :
- en créant un nom de fichier horodaté et incluant le nom de machine, d’une part,
- en supprimant les espaces de fin de ligne, d’autre part.
history |
sed -E \
-e 's,^[[:blank:]]+[[:digit:]]+[[:blank:]]+(.*)*$,\1,g' \
-e 's/[[:blank:]]*$//' |
sort |
uniq >"HISTORY.uniq.${HOSTNAME}.$( date +'%Y-%m-%d_%H-%M-%S' ).txt"
L'utilisation du tri (sort), puis de la suppression des doubles consécutifs (uniq) est un classique comme solution pour supprimer des doublons et ce quel que soit le langage informatique.
uniq
— Afficher ou exclure les lignes répétéessort
— Trier les lignes de fichiers texte
command | sort | uniq
Liens
ᦿ