Raccourcis clavier
Pour parcourir l’historique de votre 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: Aller à la commande précédente de votre historique. Appuyez plusieurs fois sur la touche pour revenir en arrière dans les commandes que vous avez utilisées.
- Flèche vers le bas ou Ctrl + N: Passe à la commande suivante de votre historique. Appuyez plusieurs fois sur la touche pour avancer dans les commandes que vous avez utilisées.
- Alt + R: Annulez les modifications apportées à une commande 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 exécutées précédemment, plutôt que de les faire défiler une par une.
- Ctrl + R: Rappelez la dernière commande correspondant aux caractères que vous avez fournis. Appuyez sur ce raccourci et commencez à taper pour rechercher une commande dans votre historique bash.
- Ctrl + O: Lance la commande trouvée avec Ctrl + R.
- Ctrl + G: Quitte le mode de recherche historique sans exécuter de commande.
Voir votre histoire Bash
Vous pouvez imprimer tout l'historique de bash à l'écran en exécutant une seule commande:
history
Vous verrez une liste de toutes les commandes de votre historique bash, avec un nombre à 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.
grep
commande pour rechercher l'historique de vos commandes.
history | grep your_search
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 les commandes de votre histoire
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, appelé «bang». Il suffit de les taper à l’invite et d’appuyer sur Entrée pour les exécuter comme pour toute autre commande.
Pour exécuter une commande spécifique de votre historique par son numéro, utilisez la commande suivante:
!#
Par exemple, supposons que vous souhaitiez exécuter la 12ème commande à partir de votre historique bash. C’est la commande avec un «12» à gauche de celle-ci lorsque vous exécutez la
history
commander. Vous tapez la commande suivante.
!12
!!
Vous pouvez également faire référence à une commande avec un certain nombre de lignes. Par exemple,
!-2
exécuterait la dernière à la dernière commande que vous avez exécutée.
!!
signifie la même chose que
!-1
!!
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 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
!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 effectuera une recherche en arrière dans votre historique, localisez la commande la plus récente commençant par «
pi
“, Et le lancer immédiatement:
!pi
:p
sur l'une des extensions ci-dessus et bash imprimera la commande au terminal sans l'exécuter. Ceci est utile si vous voulez confirmer que vous avez sélectionné la bonne commande avant de l’exécuter.
!12:p
!!:p
!text:p
Réutilisez les arguments de votre histoire
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 complexes 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
!$
obligerait bash à remplir automatiquement le dernier argument de votre commande précédente.
ping google.com -c 4
puis courir
ping !$
cela ne ferait que s’étendre à «
ping 4
“.
Pour remédier à cette situation, vous pouvez utiliser le truc suivant pour développer le premier argument de la ligne plutôt que le dernier:
command !^
Donc, si vous avez couru
ping google.com -c 4
et ensuite couru
ping !^
bash élargirait ceci à “
ping google.com'
command !*
Donc, si vous avez couru
ping !*
Au lieu de cela, bash remplira automatiquement tous les arguments que vous avez utilisés dans la commande précédente.
command !abc:#
Par exemple, nous avons exécuté la commande
sudo hostname ubuntu
plus tôt. Si nous exécutons la commande suivante, bash effectuera une recherche en arrière dans l’historique pour trouver la dernière commande commençant par les lettres que nous tapons et complétera l’argument spécifié. Donc, si nous courons
echo !su:2
bash cherchera la dernière commande commençant par “
su
"Et remplissez son deuxième argument, qui est"
ubuntu
“.
D'autres astuces fonctionnent comme prévu. Par exemple, si vous remplacez le nombre par un astérisque, appelé caractère générique, bash remplira tous les arguments de la commande:
command !abc:*
Relancez 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 à modifier. Cela peut être utile pour corriger une faute de frappe dans une commande. Par exemple, la commande suivante relance 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
vous pourriez alors courir
^gog^goog
et bash exécuterait la commande
ping google.com
au lieu.
Où votre histoire est stockée et comment la supprimer
Le shell bash stocke l’historique des commandes que vous avez exécutées dans le fichier d’historique de votre compte utilisateur sous ~ /.bash_history par défaut. Par exemple, si votre nom d’utilisateur est bob, vous trouverez ce fichier dans /home/bob/.bash_history.
Comme 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 visualisées et utilisées. Chaque compte d'utilisateur possède son propre fichier d'historique avec un historique de commandes distinct.
Pour effacer votre historique bash, vous pouvez exécuter la commande suivante. Ceci efface le contenu du fichier.bash_history de votre compte utilisateur:
history -c
HISTSIZE
variable. 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 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 telle que
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 paramètre
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.
HISTCONTROL
à
ignoredups.
HISTCONTROL=ignoredups
ignorespace
et
ignoredups
fonction, définissez le
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 dans chaque session bash que vous démarrez, si vous préférez.