Dans cet article, nous allons voir comment améliorer notre productivité en s’intéressant à l’historique bash. L’historique permet de conserver les dernières commandes tapées dans un shell bash. C’est très utile pour retrouver certaines commandes oubliées, éviter de devoir les ré-écrire ou regarder rapidement ce qu’un autre administrateur a fait sur le système.
Dans un premier temps, nous allons voir qu’il est possible de configurer cet historique, c’est-à-dire ce qui s’affiche lorsqu’on tape la commande history
. Dans un second temps, nous allons voir comment utiliser cet historique de manière efficace.
Table des matières
Configuration de l’historique bash
Vous ne le saviez peut être pas, mais il est possible de modifier le comportement de l’historique bash à l’aide de variables d’environnement. Ces variables d’environnement peuvent être ajoutées dans le fichier ~/.bashrc
.
Ignorer les commandes dupliquées et les espaces
La première variable d’environnement intéressante est HISTCONTROL
. Grâce à cette variable, on peut indiquer à l’historique de bash de :
- Ne pas afficher ou ne pas enregistrer les commandes dupliquées. Autrement dit, cela évite d’avoir 400 entrées
cd ..
dans l’historique de bash. - D’ignorer les commandes qui commence par un espace. Par exemple, la commande
[espace]cd ..
ne sera pas enregistré dans l’historique. Cela peut être pratique pour des commandes sensibles, par exemple, celles qui contiennent des mots de passes.
Il y a une petite différence entre ignoredups
et erasedups
. Avec ignoredups
, ce sont les commandes dupliquées qui se suivent qui sont ignorées. Avec erasedups
, c’est toutes les commandes dupliquées (même si elles ne se suivent pas) qui sont supprimées.
Contrôler la taille de l’historique bash
Deux variables d’environnement permettent de contrôler la taille de l’historique. Il s’agit des variables suivantes :
HISTSIZE
: en résumé, cela permet de définir le nombre de ligne qui sera affiché lorsqu’on tape la commandehistory
HISTFILESIZE
: permet de définir la taille maximale (en nombre de ligne) du fichier d’historique.
Le fichier d’historique peut être plus gros que le nombre de lignes affichées via la commande historique.
Ignorer certaines commandes
La variable HISTIGNORE
permet de définir une liste de commande à ignorer dans l’historique. On peut par exemple ignorer les commandes basiques comme cd
, ls
etc… qui encombre l’historique.
Ajouter la date à l’historique bash
La variable HISTTIMEFORMAT
permet de changer le format d’affichage de la commande history. Cela permet d’afficher la date en face des commandes lancées :
Garder l’historique de plusieurs sessions shell simultanées
Parfois, l’historique ne se conserve pas et c’est le cas lorsque plusieurs sessions shell sont ouvertes simultanément. Généralement, c’est l’historique du shell fermé en dernier qui reste conservé. Pour éviter cela, on peut ajouter la commande suivante dans le ~/.bashrc
: shopt -s histappend
shopt
: signifie « shell option » permet de modifier le comportement du shell en lui passant certaines optionshistappend
: indique au shell que lorsqu’on ferme une option, l’historique doit être ajouté à la fin du fichier d’historique (append), ce qui permet de conserver les commandes lancées dans tous les shell et non celui fermé en dernier.
Astuces pour utiliser efficacement l’historique bash
Maintenant que nous avons vu qu’il était possible de modifier la configuration de l’historique, nous allons voir quelques astuces pour l’utiliser de manière efficace.
Rechercher une commande dans l’historique bash
Première méthode pour faire une recherche dans l’historique, celle qui reste ma favorite : grep
.
La deuxième méthode consiste à utiliser le raccourcis CTRL + R
de bash, qui lance le mode reverse search. Dés que le raccourcis est activé, il est possible de faire une recherche sur un mot clé. Dés que la commande recherchée est trouvé, il suffit de la lancer avec le raccourcis CTRL + O
ou plus simplement la touche Entrer
. Pour sortie de ce mode de recherche, il faut utiliser le raccourcis CTRL + G
.
Lancer une commande de l’historique bash
Bash est capable de lancer des commandes qui sont présentes dans l’historique. Le fonctionnement se base sur l’utilisation du caractère !
. Cela effectue une substitution donc cela signifie que cela fonctionne comme une variable. Concrètement, cela veut dire que nous pouvons chaîner les commandes, utiliser le !
n’importe où et y ajouter des arguments. Il existe plusieurs variantes :
!42
: lance la commande ayant le numéro 42 dans l’historique. Comment trouver ce numéro ? Simplement en tapant la commandehistory
. Chaque commande de l’historique est préfixé d’un numéro.!!
: relance la dernière commande présente dans l’historique. Revient au même que de faire un « flèche supérieur » puis « entrer ».!motCle
: relance la dernière commande qui correspond au premier résultat de la recherche inversé sur « motCle ». Autrement dit, cela recherche le mot clé (en partant des dernières commandes lancées) puis lance la commande trouvé.!42:p
,!!:p
,!motCle:p
: l’ajout du:p
permet d’afficher la commande plutôt que de la lancer.^mtCl^motCle
: relance la dernière commande mais en remplaçant « mtCl » par « motCle« . Autrement dit, cela permet de relancer la dernière commande en corrigeant une faute qu’on aurait pu faire.
Réutilisation des arguments
A défaut de relancer intégralement une commande présente dans l’historique, on peut réutiliser les arguments passés dans des commandes précédentes. Pour cela, on va toujours utiliser le !
:
!$
: sera substitué par le dernier argument de la dernière commande lancée.!^
: premier argument de la dernière commandé exécutée.!*
: tous les arguments de la dernière commande lancée.!cmd:2
: fait une recherche inversé sur le terme « cmd » dans l’historique et retourne le deuxième arguments de cette commande.:cmd:*
: fait une recherche inversé sur le terme « cmd » et retour tous les arguments de cette commande.
Supprimer une commande ou tout l’historique bash
Parfois l’historique contient des informations secrètes, comme un mot de passe par exemple. Pour supprimer une ligne particulière de l’historique, il faut commencer par récupérer le numéro de la ligne correspondante. Cela est récupérable avec la commande history
. Ensuite, il faut lancer la commande history -d {numéro de la ligne}
pour supprimer l’entrée.
Pour supprimer l’intégralité de l’historique, il faut lancer la commande suivante dans tous les shells qui sont ouvert : history -cw
Conclusion
J’espère que cet article vous aura donné quelques astuces sur l’historique de bash ! Nous avons vu qu’il était possible de le configurer et qu’il existe pleins d’astuces pour l’utiliser quotidiennement. Si vous avez d’autres astuces ou remarques à ce sujet, n’hésitez pas à en faire part dans les commentaires !
2 réponses sur « Comment configurer et utiliser efficacement l’historique bash »
Merci et j’aime bien ce que tu fait . je voudrais bien qu’on se fasse connaissance
Merci pour votre article très complet ! Je cherchais à manipuler l’historique de bash car je tape beaucoup de commandes et j’ai enfin réussi à facilement les retrouver