24Aug

Comment utiliser votre historique Bash dans le terminal Linux ou macOS

Le shell bash est l'environnement de terminal standard inclus avec la plupart des distributions Linux, inclus avec macOS, et disponible pour installation sur Windows 10. Il se souvient des commandes que vous tapez et les stocke dans un fichier historique. Vous connaissez probablement quelques bases de l'histoire de bash, mais c'est beaucoup plus puissant que vous pourriez le réaliser.

Raccourcis clavier

Pour faire défiler votre historique bash, vous pouvez utiliser quelques-uns des nombreux raccourcis clavier utiles de bash. Appuyez sur ces raccourcis et les commandes que vous avez déjà utilisées apparaîtront à l'invite.

  • Flèche vers le haut ou Ctrl + P : Accédez à la commande précédente de votre historique. Appuyez plusieurs fois sur la touche pour reculer dans les commandes que vous avez utilisées.
  • Flèche vers le bas ou Ctrl + N : Passez à la commande suivante de votre historique. Appuyez plusieurs fois sur la touche pour avancer dans les commandes que vous avez utilisées.
  • Alt + R : Rétablit les modifications apportées à une commande que vous avez extraite de votre historique si vous l'avez modifiée sur la ligne en cours.

Bash dispose également d'un mode spécial de "rappel" que vous pouvez utiliser pour rechercher les commandes que vous avez précédemment exécutées, plutôt que de les faire défiler une par une.

  • Ctrl + R : Rappelez la dernière commande correspondant aux caractères que vous fournissez. Appuyez sur ce raccourci et commencez à taper pour rechercher dans votre historique bash une commande.
  • Ctrl + O : Exécutez la commande que vous avez trouvée avec Ctrl + R.
  • Ctrl + G : Quitte le mode de recherche d'historique sans exécuter de commande.

Afficher l'historique de votre bash

Vous pouvez imprimer l'ensemble de l'historique bash à l'écran en exécutant une seule commande:

history

Vous verrez une liste de toutes les commandes de votre historique bash, ainsi qu'un nombre à gauche de chacune. La commande avec un "1" à côté est la commande la plus ancienne dans votre historique de bash, tandis que la commande avec le plus grand nombre est la plus récente.

Vous pouvez faire tout ce que vous voulez avec la sortie. Par exemple, vous pouvez le rediriger vers la commande grep pour rechercher votre historique de commandes.

histoire |grep your_search

Vous pouvez également le rediriger vers la commande tail pour afficher seulement un petit nombre de commandes récentes que vous avez exécutées. Par exemple, la commande suivante affichera les 5 dernières entrées de votre historique.

histoire |tail -5

Exécuter des commandes à partir de votre historique

Bash peut rapidement "développer" les commandes précédentes, ou les développer et les modifier. Cette fonctionnalité est appelée "expansion de l'historique" et utilise un point d'exclamation, connu sous le nom de "bang".Tapez les simplement à l'invite et appuyez sur Entrée pour les exécuter comme si vous lanciez une autre commande.

Pour exécuter une commande spécifique à partir de votre historique par son numéro, utilisez la commande suivante:

! #

Par exemple, supposons que vous vouliez exécuter la 12ème commande depuis votre historique bash. C'est la commande avec un "12" à gauche lorsque vous exécutez la commande history. Vous tapez la commande suivante.

! 12

Pour réexécuter la dernière commande exécutée, tapez ce qui suit. Cela a le même effet que d'appuyer une fois sur la flèche Haut pour afficher la commande précédente, puis sur Entrée.

! !

Vous pouvez également renvoyer à une commande un certain nombre de lignes en arrière. Par exemple,! -2 exécutera l'avant-dernière commande que vous avez exécutée.!!signifie la même chose que! -1.

Cette extension fonctionne n'importe où sur la ligne. Vous pouvez ajouter tout ce que vous aimez avant ou après! !ou l'une des autres expressions de cette section. Par exemple, vous pouvez taper la commande suivante pour réexécuter la dernière commande que vous avez exécutée via sudo, en lui donnant les privilèges root. Ceci est particulièrement utile si vous oubliez d'ajouter sudo avant d'exécuter une commande.

sudo! !

Ou, par exemple, vous pouvez relancer la commande précédente et rediriger sa sortie vers grep pour rechercher du texte.

! !|texte grep

Pour rechercher une commande dans votre historique et l'exécuter, tapez ce qui suit. Ceci exécutera la dernière commande qui correspond au texte que vous spécifiez:

! Text

Donc, si vous avez récemment exécuté une commande commençant par ping, vous pouvez exécuter la commande suivante pour la rechercher. Cela va chercher en arrière dans votre histoire, localiser la commande la plus récente qui commence par "pi", et l'exécuter immédiatement:

! Pi

Vous pouvez ajouter un: p à n'importe laquelle des expansions ci-dessus et bash imprime la commande au terminal sans l'exécuter. Ceci est utile si vous voulez confirmer que vous sélectionnez la bonne commande avant de l'exécuter.

! 12: p! !: p! Text: p

Réutiliser les arguments de votre historique

Bash vous permet également d'exécuter une nouvelle commande, mais utilisez les arguments des commandes précédentes de votre historique. Cela peut vous aider à réutiliser rapidement des arguments longs ou complexes sans avoir à les retaper.

command! $

Par exemple, disons que vous avez exécuté la commande, appuyez sur /home/chris/. Some_long_file_name_you_dont_want_to_type_again. Vous voulez maintenant exécuter la commande nano /home/chris/ some_long_file_name_you_dont_want_to_type_again. Plutôt que de taper le tout à partir de zéro, vous pouvez exécuter:

nano! $

Le! $ Rendrait bash automatiquement remplir le dernier argument de votre commande précédente.

Ceci remplit seulement le dernier argument. Donc, si vous lancez ping google.com -c 4 et que vous lancez ping! $, Cela se limitera à "ping 4".

Pour résoudre cette situation, vous pouvez utiliser l'astuce suivante pour développer le premier argument sur la ligne, plutôt que la dernière:

commande! ^

Donc, si vous avez exécuté ping google.com -c 4, puis couru ping! ^,bash étendrait cela à "ping google.com"

Pour remplir tous les arguments utilisés dans la commande précédente au lieu d'un seul argument, vous utiliseriez la commande suivante:

! *

Donc, si vous avez exécuté ping!* à la place, bash remplirait automatiquement tous les arguments que vous avez utilisés dans la commande précédente

Vous pouvez utiliser la même astuce que vous utilisez pour exécuter des commandes de votre historique pour obtenir des arguments à partir d'eux.#

Par exemple, nous avons exécuté la commande sudo hostname ubuntu plus tôt Si nous lançons la commande suivante, bash cherchera en arrière dans l'historique pour trouver la dernière commande commençant par les lettres que nous tapons et remplit l'argument que nous spécifions.nous courons echo! su: 2, bash va chercher en arrière pour trouver la dernière commande commençant par "su" et remplir son second argument, qui est "ubuntu".

D'autres astuces fonctionnent comme vous pourriez vous y attendre. Par exemple, remplacer le nombre par un astérisque, connu sous le nom de caractère générique, oblige bash à remplir tous les arguments de la commande:

commande! Abc: *

Réexécute la commande précédente et la modifie

Bash vous permet également de relancer la commande précédenteet spécifiez quelque chose qui devrait être changé.Cela peut être utile pour corriger une faute de frappe dans une commande. Par exemple, la commande suivante réexécutera la commande précédente en remplaçant le texte "abc" par le texte "xyz".

^ abc ^ xyz

Par exemple, si vous avez accidentellement exécuté ping gogle.com, vous pouvez alors exécuter ^ gog ^ goog et bash exécutera la commande ping google.com à la place.

Où votre historique est stocké et comment l'effacer

Le shell bash stocke l'historique des commandes que vous avez exécutées dans le fichier historique de votre compte utilisateur à ~ /. bash_history par défaut. Par exemple, si votre nom d'utilisateur est bob, vous trouverez ce fichier sur /home/bob/. bash_history.

Parce que votre historique est stocké dans un fichier, il persiste entre les sessions. Vous pouvez exécuter certaines commandes, vous déconnecter, revenir le lendemain et ces commandes seront toujours dans votre fichier historique prêt à être visualisé et utilisé.Chaque compte d'utilisateur possède son propre fichier d'historique avec un historique de commandes distinct.

Pour effacer votre historique de bash, vous pouvez exécuter la commande suivante. Ceci efface le contenu du fichier. bash_history de votre compte:

history -c

Bash ne mémorise qu'un nombre limité de commandes par défaut, ce qui empêche le fichier d'historique de devenir trop volumineux. Le nombre d'entrées d'historique que bash se souvient est contrôlé par la variable HISTSIZE.La valeur par défaut est généralement 500 ou 1000 entrées. Vous pouvez exécuter la commande suivante pour afficher la taille de l'historique bash sur votre système.

echo $ HISTSIZE

Pour mettre votre historique à zéro, exécutez la commande suivante.

HISTSIZE = 0

Pour la session en cours, bash ne stocke aucune entrée d'historique sauf si vous exécutez une commande comme HISTSIZE = 1000 pour la rétablir à un certain nombre d'entrées.

Comment ignorer les espaces et les doublons

Bash vous permet d'ignorer les entrées d'historique qui commencent par un espace si vous définissez la variable HISTCONTROL à ignorer l'espace.

HISTCONTROL = ignorespace

Tapez un espace avant une commande avant de l'exécuter dans le shell bash et la commande s'exécutera normalement, mais n'apparaîtra pas dans votre historique si cette variable est activée. Cela vous permet de garder votre historique un peu plus propre, en choisissant d'exécuter des commandes sans qu'elles n'apparaissent dans votre historique.

Bash vous permet également d'ignorer les commandes en double qui peuvent encombrer votre historique. Pour ce faire, définissez HISTCONTROL sur ignoredups.

HISTCONTROL = ignoredups

Pour utiliser à la fois la fonction ignorespace et ignoredups, définissez la variable HISTCONTROL sur ignoreboth.

HISTCONTROL = ignoreboth

Notez que les variables bash que vous définissez ne persisteront que pour la session en cours. Vous devrez les ajouter au fichier. bashrc de votre compte utilisateur pour que ces valeurs soient automatiquement définies dans chaque session bash que vous commencez, si vous préférez cela.

Le shell bash est un outil complexe avec beaucoup plus d'options que celles-ci. Consultez les sections Bash History Builtins et History Expansion dans le manuel officiel de bash pour obtenir des informations plus détaillées et d'autres astuces avancées que vous pouvez utiliser.