Généralités
En mode terminal, toutes les commandes passées sont enregistrées dans un fichier historique ¹. On peut aisément les retrouver en utilisant la flèche haut ou bas mais une commande permet de manipuler plus aisément l'historique, c'est la commande...
Code : Tout sélectionner
historyCode : Tout sélectionner
history --help
man historyCode : Tout sélectionner
# forcer l'écriture des commandes de la session dans le fichier historique physique
history -w
# purger l'historique du fichier temporaire (mais pas du fichier physique) depuis le début de session ou la dernière écriture (history -w)
history -cCode : Tout sélectionner
# liste les 20 dernières commandes
history 20
# reprendre et exécuter la commande n° 123
!123
# reprendre et exécuter la dernière commande commençant par un ou plusieurs mot⋅s⋅ (nano dans l'exemple)
!nano
!nano /etc
Pour éviter l'exécution de la commande on peut suffixer notre rappel avec ":p" qui mettra la commande choisie à la fin de l'historique sans l'exécuter. On la retrouvera (pour la compléter ou la modifier) avec une simple flèche haute
Code : Tout sélectionner
# rappel de la commande 328 ou celle commençant par nano sans l'exécuter
!328:p
!nano:p
# un flèche haute permet de la reprendre et de l'éditerLa recherche d'une commande par le point d'exclamation ne prend que celle dont on fournit le numéro ou la dernière qui commence par le terme. Si on veut toutes les commandes qui contiennent un mot précis, on peut utiliser l'option grep sous la forme
Code : Tout sélectionner
# toutes les commandes qui contiennent apt
history | grep aptComme vu précédemment, en faisant suivre le mot history par un nombre, on appliquera la recherche aux seuls n derniers enregistrements
Code : Tout sélectionner
# recherche des commandes contenant apt dans les 20 dernières commandes
history 20 | grep aptCode : Tout sélectionner
alias hg='history | grep -i'
En enfin, si on veut que cette abréviation soit permanente, on la mettra dans le fichier $HOME/.bash_aliases (il semble préférable de laisser le fichier .bashrc à l'état d'origine au moins pour les alias personnels).
Pour résumer
Code : Tout sélectionner
# mon alias créé, je recherche les commandes contenant "apt"
hg apt
# je sélectionne la commande qui m'intéresse et la met à la fin de mon historique
!227:p
# j'utilise la flèche haute pour la reprendre, l'adapter et l'exécuter
On peut citer:
Code : Tout sélectionner
!?abcdefg?Code : Tout sélectionner
!-xCode : Tout sélectionner
!!- et d'autres...
Les arguments
Là ce sont des options avancées
Code : Tout sélectionner
!!:^Code : Tout sélectionner
!!:*Code : Tout sélectionner
!!:$Code : Tout sélectionner
!n:mOn pourra bien sûr appliquer ces options avancées à la dernière commande (!!) ou à la commande n° n (!n).
Horodatage du fichier history (@pastille)
Notre ami @pastille me rapporte une astuce qui permet de compléter la commande history; je la livre telle qu'il l'a écrite car je n'ai rien à y ajouter.
Cette astuce concerne la commande history et consiste à créer une variable d'environnement nommée HISTTIMEFORMAT
ce qui va permettre de voir s'afficher dans le retour de la commande history la date/heure à laquelle les lignes de commandes enregistrées ont été entrées.
Pour ça, j'ai ajouté dans mon fichier ~/bashrc la ligne de commande suivante :
Code : Tout sélectionner
HISTTIMEFORMAT="%d/%m/%Y %T " # Format d'affichage date/heure des lignes de commande(s) enregistrées dans ~/.bash_history
Code : Tout sélectionner
471 05/12/2025 11:06:39 man --pager='less -p “^APPEL”' bash
472 05/12/2025 11:07:01 man bash
473 05/12/2025 11:35:26 man history
474 05/12/2025 11:36:40 less bash_logHistory
475 05/12/2025 11:36:03 mc
476 05/12/2025 11:56:36 history Si un fichier history non horodaté existe déjà, toutes les anciennes commandes le seront avec la date et l'heure du jour; les suivantes seront à leur bonne date.
¹ Les curieux peuvent jouer avec les fichiers historiques et leurs paramètres en consultant cet article.
