Le shell bash est l’environnement de terminal standard inclus dans la plupart des distributions Linux, inclus avec macOS, et disponible pour l’installation sous Windows 10. Il se souvient des commandes que vous saisissez et les stocke dans un fichier d’historique. Vous connaissez probablement quelques notions de base sur l’histoire du bash, mais c’est beaucoup plus puissant que vous ne le pensez.
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 précédemment 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 parcourir les commandes que vous avez utilisées.
- Alt + R: Annulez les modifications apportées à une commande que vous avez extraite de votre historique si vous l’avez modifiée sur la ligne actuelle.
Bash a également 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: Quittez le mode de recherche d’historique sans exécuter de commande.
Afficher votre historique Bash
Vous pouvez imprimer l’intégralité de votre historique bash à l’écran en exécutant une seule commande:
history
Vous verrez une liste de toutes les commandes de votre historique bash, avec un numéro à gauche de chacune. La commande avec un «1» à côté est la commande la plus ancienne de votre historique bash, tandis que la commande avec le numéro le plus élevé est la plus récente.
Vous pouvez faire tout ce que vous voulez avec la sortie. Par exemple, vous pouvez le diriger vers le grep
commande pour rechercher votre historique de commandes.
history | grep your_search
Vous pouvez également le diriger vers le tail
commande pour afficher uniquement un petit nombre des commandes récentes que vous avez exécutées. Par exemple, la commande suivante affichera les 5 dernières entrées de votre historique.
history | tail -5
Exécuter des commandes à partir de votre historique
Bash peut rapidement «étendre» les commandes précédentes, ou les étendre et les modifier. Cette fonction est connue sous le nom d ‘«expansion de l’historique» et utilise un point d’exclamation, appelé «bang». Tapez-les simplement à l’invite et appuyez sur Entrée pour les exécuter comme vous exécuteriez n’importe quelle autre commande.
Pour exécuter une commande spécifique de votre historique par son numéro, utilisez la commande suivante:
!#
Par exemple, disons que vous vouliez exécuter la 12e commande à partir de votre historique bash. C’est la commande avec un «12» à sa gauche lorsque vous exécutez le history
commander. Vous tapez la commande suivante.
!12
Pour réexécuter la dernière commande que vous avez exécutée, tapez ce qui suit. Cela a le même effet que d’appuyer une fois sur la flèche vers le haut pour afficher la commande précédente, puis d’appuyer sur Entrée.
!!
Vous pouvez également vous référer à une commande un certain nombre de lignes en arrière. Par exemple, !-2
exécuterait l’avant-dernière commande que vous avez exécutée. !!
signifie la même chose que !-1
.
This expansion works anywhere on the line. You can add anything you like before or after !!
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 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 réexécuter la commande précédente et diriger sa sortie vers grep pour rechercher du texte.
!! | grep text
Pour rechercher une commande dans votre historique et l’exécuter, tapez ce qui suit. Cela 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 le rechercher. Cela recherchera en arrière dans votre historique, localisera la commande la plus récente commençant par « pi
« , Et exécutez-le immédiatement:
!pi
Vous pouvez ajouter un :p
à l’une des extensions ci-dessus et bash imprimera la commande sur le terminal sans l’exécuter. Ceci est utile si vous souhaitez confirmer que vous sélectionnez la commande correcte 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 d’utiliser les arguments des commandes précédentes de votre historique. Cela peut vous aider à réutiliser rapidement des arguments longs ou compliqués sans avoir à les retaper.
command !$
Par exemple, disons que vous avez exécuté la commande touch /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 !$
ferait que bash remplisse automatiquement le dernier argument de votre commande précédente.
Cela ne remplit que le dernier argument. Donc, si tu cours ping google.com -c 4
puis exécutez ping !$
, cela ne ferait que s’étendre à « ping 4
«.
Pour résoudre cette situation, vous pouvez utiliser l’astuce suivante pour développer le premier argument de la ligne, plutôt que le dernier:
command !^
Donc, si tu courais ping google.com -c 4
puis a 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 ce qui suit:
command !*
Donc, si tu courais 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 afin d’obtenir des arguments à partir d’elles. Utilisez simplement le formulaire suivant.
command !abc:#
Par exemple, nous avons exécuté la commande sudo hostname ubuntu
plus tôt. Si nous exécutons la commande suivante, bash recherchera en arrière dans l’historique pour trouver la dernière commande commençant par les lettres que nous tapons et remplira l’argument que nous spécifions. Donc, si nous courons echo !su:2
, bash cherchera en arrière pour trouver la dernière commande commençant par « su
»Et remplissez son deuxième argument, qui est«ubuntu
«.
D’autres astuces fonctionnent comme vous vous en doutez. Par exemple, en remplaçant le nombre par un astérisque, appelé caractère générique, bash remplit tous les arguments de la commande:
command !abc:*
Réexécutez la commande précédente et modifiez-la
Bash vous permet également de réexécuter la commande précédente et de spécifier quelque chose qui doit être modifié. 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
« Dedans avec le texte »xyz
«.
^abc^xyz
Par exemple, si vous avez accidentellement exécuté ping gogle.com
, tu pourrais alors courir ^gog^goog
et bash exécuterait la commande ping google.com
au lieu.
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 d’historique de votre compte utilisateur à ~ / .bash_history par défaut. Par exemple, si votre nom d’utilisateur est bob, vous trouverez ce fichier dans /home/bob/.bash_history.
Étant donné 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 d’historique, prêtes à être vues et utilisées. Chaque compte utilisateur possède son propre fichier d’historique avec un historique des commandes distinct.
Pour effacer votre historique bash, vous pouvez exécuter la commande suivante. Cela efface le contenu du fichier .bash_history de votre compte utilisateur:
history -c
Bash ne se souvient que d’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 le HISTSIZE
variable. La valeur par défaut est généralement de 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 définir votre historique sur zéro, exécutez la commande suivante.
HISTSIZE=0
Pour la session en cours, bash ne stockera aucune entrée d’historique sauf si vous exécutez une commande comme HISTSIZE=1000
pour le remettre à un certain nombre d’entrées.
Comment ignorer les espaces et les doublons
Bash vous permet d’ignorer les entrées d’historique commençant par un espace si vous définissez le HISTCONTROL
variable à ignorespace.
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
à ignoredups.
HISTCONTROL=ignoredups
Pour utiliser à la fois ignorespace
et ignoredups
fonction, définissez la HISTCONTROL
variable à 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 à chaque session bash que vous démarrez, si vous préférez cela.
Le shell bash est un outil complexe avec beaucoup plus d’options que celles-ci. Consultez le Historique de Bash Builtins et Expansion de l’histoire sections dans le manuel officiel de bash des informations plus détaillées et d’autres astuces avancées que vous pouvez utiliser.