Comment afficher l’historique du shell BASH et retrouver vos commandes

Le shell BASH sur Linux et sa variante la plus connue ZSH sur les versions les plus récentes de MacOs est un outil formidable qui permet d’effectuer un très grand nombre d’actions en ligne de commande. Que ce soit pour installer des logiciels, faire des mises à jour, ajouter une configuration, manipuler ou retrouver des fichiers, et encore bien d’autres choses, le shell BASH est un outil formidable lorsque l’on apprend à le maitriser. Ne vous inquiétez pas, on verra ça dans une série de tutoriels !

Aujourd’hui nous allons commencer par la base, à savoir afficher l’historique et fouiller dedans pour retrouver une commande exécutée dans le passé. En général les conseils donnés ici fonctionneront sur la plupart des distributions Linux ainsi que sur MacOS d’Apple qui fait aussi partie de la famille des systèmes d’exploitation UNIX. Cela peut aussi s’appliquer dans une moindre mesure sous Windows de chez Microsoft mais on y reviendra dans d’autres tutoriels.

Pour afficher l’historique des lignes de commandes que vous avez exécuté dans le passé, rien de plus simple il suffit de faire :

history

Vous allez alors obtenir un résultat qui devrait ressembler à quelque chose comme ça :

1 htop
2 git status
3 git add .
4 git commit
5 git push 
6 git status
7 exit
8 history

Selon les distributions Linux et votre shell, sachant que cela diffère encore avec MacOS, lorsque l’on tape cette commande history, le résultat sera plus ou moins long. Parfois vous allez avoir l’ensemble du résultat de votre historique depuis le début. Dans d’autres cas, ce sera comme chez moi, après des milliers de commandes, le nombre de ligne retourné est limité sur MacOS.

Rassurez vous il est possible de remonter bien plus loin sans ouvrir le fichier ~/.bash_history qui contient réellement cet historique sur Linux et cela en utilisant seulement la ligne de commande. La petite technique que j’ai trouvé pour afficher l’ensemble de l’historique est la suivante si history se limite en nombre de lignes, faites :

history 1

Cela va alors afficher l’ensemble de l’historique sans le tronquer à partir de la ligne … 1. Si vous aviez fait history 3, cela affiche alors l’ensemble de la l’historique à partir de la ligne 3, pratique non ?

Enfin dernière chose à savoir et qui est très pratique, rechercher dans l’historique ! Lorsque qu’il y a des milliers de commandes qui ont étés tapés, autant se servir la puissance de la ligne de commande plutôt que d’ouvrir le fichier directement non ? Selon la nature de votre shell et combien de lignes sont retournés, 2 solutions s’offrent à vous pour chercher dans l’historique sans aller explorer le fichier d’historique en dur sur votre distribution Linux ou MacOS.

Comment rechercher une commande dans l’historique avec grep ?

En effet, il y existe la commande grep très pratique qui permet de rechercher des chaines de caractères, on reviendra dessus en détail dans un autre article. L’avantage de la ligne de commande, c’est que l’on peut faire des combinaisons pour décupler leur puissance. La première possibilité, si history vous retourne l’ensemble des commandes que vous avez tapé, un simple :

history | grep git

Devrait être suffisant pour vous renvoyer l’ensemble des commandes qui contiennent « git ». Par contre dans mon cas avec un macOS récent, ou d’une configuration particulière sur une distribution Linux qui limiterait le nombre de lignes renvoyé à l’utilisateur, si ce que vous cherchez n’est pas dans les dernières commandes que vous avez renseigné au shell, alors la fonction ne renverra rien, pourtant vous avez déjà fait cette commande il y a longtemps !

Pas de soucis, pour remédier à cela, on va utiliser la petite technique de contournement vue plus haut et faire un :

history 1 | grep brew

Maintenant c’est bon ! Il va bien nous chercher les vielles commandes qui contiennent « brew », ultra pratique n’est ce pas ?

J’espère que ce tutoriel vous aidera, surtout sur macos et le shell ZSH qui peuvent avoir quelques subtilités, mais rien d’insurmontable comme vous pouvez le voir :

545  brew update && brew upgrade
935  brew install php@8.1
941  brew info 
943  brew cleanup 
944  brew info 
1042 history 1 | grep brew

9 réflexions au sujet de “Comment afficher l’historique du shell BASH et retrouver vos commandes”

  1. Merci bien pour ce tuto, je ne connaissais pas. Mais la question qui me vient immédiatement, c’est comment je peux faire pour relancer la commande XX (dans ton tableau ci-dessus par exemple la commande 545 « brew update && brew upgrade » sans avoir à la retaper ? Est-ce qu’il y a une commande pour ça, ou bien je dois faire copier / coller (ce qui n’est pas très long, j’en conviens…).
    Merci.

    Répondre
  2. Ctrl + r
    est très efficace aussi
    Il suffit de saisir quelques caractères et ça affiche la dernière commande qui les contient.
    Puis on refait ctrl + r pour continuer à chercher dans les commandes précédentes

    Répondre
  3. Merci pour cet article ! Mais il me semble que LA commande la plus utile pour retrouver une commande dans l’historique n’a pas été donnée : Ctrl+R. Appuyez sur ce raccourci clavier, puis les quelques lettres de la commande dont vous vous souvenez, et elle devrait apparaître. Si vous cherchez une commande plus ancienne, appuyez de nouveau sur Ctrl+R pour afficher la précédente. Quand vous avez trouvé la commande que vous cherchiez, appuyez sur Entrée pour la rejouer. Appuyez sur Ctrl+C pour sortir du mode recherche.

    Répondre

Laisser un commentaire