Page d'accueil » comment » Comment utiliser votre historique Bash dans un terminal Linux ou macOS

    Comment utiliser votre historique Bash dans un terminal Linux ou macOS

    Le shell bash est l’environnement terminal standard inclus dans la plupart des distributions Linux, inclus dans macOS et disponible pour l’installation sur Windows 10. Il mémorise les commandes que vous tapez et les stocke dans un fichier d’historique. Vous connaissez probablement quelques bases de l'histoire de bash, mais elles sont beaucoup plus puissantes que vous ne le croyez.

    Raccourcis clavier

    Pour parcourir l'historique de 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 parcourir les commandes que vous avez utilisées..
    • Alt + R: Annule les modifications apportées à une commande extraite de votre historique si vous l'avez modifiée sur la ligne en cours.

    Bash possède également un mode spécial «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: Quitter le mode de recherche de l'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:

    l'histoire

    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 ce que vous voulez avec la sortie. Par exemple, vous pouvez le diriger vers le grepcommande pour rechercher l'historique de vos commandes.

    histoire | grep your_search

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

    histoire | queue -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 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, 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 le l'histoire commander. Vous voudriez taper la commande suivante.

    !12

    Pour relancer 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 vers le haut pour afficher la commande précédente, puis d'appuyer sur Entrée..

    !!

    Vous pouvez également faire référence à une commande d'un certain nombre de lignes. Par exemple, !-2 exécuterait la deuxième à la 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 ce que vous voulez 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 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. Ceci exécutera la dernière commande qui correspond au texte que vous spécifiez:

    !texte

    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 va chercher en arrière dans votre historique, localiser la commande la plus récente qui commence par “pi“Et le lancer immédiatement:

    !pi

    Vous pouvez ajouter un : 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 sélectionnez la commande correcte avant de l'exécuter..

    !12: p
    !!: p
    !texte: p

    Réutilisez les arguments de votre histoire

    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.

    commande! $

    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 bash automatiquement remplir le dernier argument de votre commande précédente.

    Cela ne remplit que le dernier argument. Donc, si vous courez 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:

    commande! ^

    Donc, si vous avez couru ping google.com -c 4 et ensuite couru ping! ^ , bash élargirait ceci à “ping google.com ".

    Pour compléter tous les arguments utilisés dans la commande précédente au lieu d'un seul argument, utilisez les éléments suivants:

    commande! *

    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..

    Vous pouvez utiliser le même truc que vous utilisez pour exécuter des commandes de votre historique afin d’obtenir des arguments à partir de celles-ci. Utilisez simplement le formulaire suivant.

    commande! 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 avons tapées et complétera l’argument spécifié. Donc, si nous courons echo! su: 2 , bash recherchera la dernière commande commençant par “su"Et compléter 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:

    commande! 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"Dans le texte"xyz“.

    ^ abc ^ xyz

    Par exemple, si vous avez exécuté accidentellement 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 historique de votre compte utilisateur à l'emplacement ~ / .bash_history par défaut. Par exemple, si votre nom d'utilisateur est bob, vous trouverez ce fichier à l'adresse /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 a son propre fichier d'historique avec un historique de commandes séparé..

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

    histoire -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 dans l'historique que bash se souvient est contrôlé par le HISTSIZEvariable. 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 à zéro, exécutez la commande suivante.

    HISTSIZE = 0

    Pour la session en cours, bash ne stockera aucune entrée d’historique à moins que vous n’exécutiez 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 HISTCONTROLvariable à ignorer l'espace.

    HISTCONTROL = ignore les espaces

    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 à ignoré.

    HISTCONTROL = ignoredups

    Pour utiliser les deux ignorer l'espace et ignoré fonction, définissez le HISTCONTROL variable à ignorer les deux.

    HISTCONTROL = ignorer les deux

    Notez que les variables bash que vous définissez ne persisteront que pour la session en cours. Vous devez 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 que.

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