La commande history et ses options.

Vos petites astuces, répertoire des tutoriels et astuces
Répondre
Avatar du membre
tioker
Messages : 980
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

La commande history et ses options.

Message par tioker »

Commande history

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

history
Cette commande liste en les numérotant toutes les dernières commandes passées, qu'elles soient dans la session active ou les précédentes. Elle offre de multiples options qui peuvent être consultées dans l'aide en ligne ou le manuel Linux

Code : Tout sélectionner

history --help
man history
Il est important de connaitre dès le départ une notion primordiale. À l'ouverture de la session, l'historique est chargé en mémoire (ou fichier temporaire). Les nouvelles commandes seront ajoutées à ce fichier temporaire et écrites dans le fichier historique à la fin de session à moins qu'on fasse deux choses (et peut-être d'autres).

Code : 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 -c
Les premières bases de gestion de cette commande peuvent se résumer à

Code : 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
Mais attention on reprend les commandes mais on les exécute aussi, ce qui peut être gênant.
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'éditer
grep

La 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 apt
Et donc on pourra reprendre la commande voulue par son numéro pour la ré-exécuter ou l'éditer (avec :p).
Comme 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 apt
Maintenant, si on veut simplifier la commande par un alias (abréviation d'une commande complète) on peut écrire

Code : Tout sélectionner

alias hg='history | grep -i'
ce qui nous offrira une nouvelle commande hg (comme history | grep).
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
Autres options

On peut citer:

Code : Tout sélectionner

!?abcdefg?
rappelle la dernière commande qui contient abcdefg (et non pas qui commence par). À utiliser avec ":p"
exécutera la xième commande depuis la fin (attention, bien compter...)
rappel la dernière commande (à l'identique de la flèche haute)
- et d'autres...

Les arguments

Là ce sont des options avancées

Code : Tout sélectionner

!!:^
(ou la forme abrégée !^) pour désigner le premier argument de la dernière commande,

Code : Tout sélectionner

!!:*
(ou la forme abrégée !*) pour désigner tous les arguments de la dernière commande,

Code : Tout sélectionner

!!:$
(ou la forme abrégée !$) pour désigner le dernier argument de la dernière commande,

Code : Tout sélectionner

!n:m
pour désigner l’argument m de la commande de numéro n.
On pourra bien sûr appliquer ces options avancées à la dernière commande (!!) ou à la commande n° n (!n).

¹ Les curieux peuvent jouer avec les fichiers historiques et leurs paramètres en consultant cet article.
HP Victus 16: Mint 21.3 Cinnamon 6,0,4 + Windows 11 - Ryzen 5 5600H - NVIDIA GeForce GTX 1650 - Mem 16Go - SSD 512Go
pCloud Synchronisation en temps réel des 4 dossiers personnels

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: La commande history et ses options.

Message par cyrille »

Thanx pour ce très bon tuto Tioker ;)
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Répondre