Comment utiliser la commande d’historique sous Linux

Le shell de Linux enregistre un historique des commandes que vous exécutez, et vous pouvez le rechercher pour répéter les commandes que vous avez exécutées dans le passé. Une fois que vous comprenez la commande d’historique Linux et comment l’utiliser, elle peut considérablement augmenter votre productivité.

Manipuler l’histoire

Comme George Santayana a dit:, « Ceux qui ne se souviennent pas du passé sont condamnés à le répéter. » Malheureusement, sous Linux, si vous ne vous souvenez pas du passé, vous ne pouvez pas le répéter, même si vous le souhaitez.

C’est alors que la commande d’historique Linux est utile. Il vous permet de revoir et de répéter vos commandes précédentes. Cela ne vise pas seulement à encourager la paresse ou à gagner du temps – il y a aussi un facteur d’efficacité (et de précision) en jeu. Plus une commande est longue et compliquée, plus elle est difficile à mémoriser et à taper sans faire d’erreur. Il existe deux types d’erreurs: une qui empêche la commande de fonctionner, et une qui permet à la commande de fonctionner, mais la fait faire quelque chose d’inattendu.

La commande historique élimine ces problèmes. Comme la plupart des commandes Linux, il y a plus que vous ne le pensez. Cependant, si vous apprenez à utiliser la commande history, elle peut améliorer votre utilisation de la ligne de commande Linux, chaque jour. C’est un bon investissement de votre temps. Il existe de bien meilleures façons d’utiliser la commande d’historique que d’appuyer sur la flèche vers le haut à plusieurs reprises.

La commande d’histoire

Dans sa forme la plus simple, vous pouvez utiliser la commande history en tapant simplement son nom:

history

le

La liste des commandes précédemment utilisées est ensuite écrite dans la fenêtre du terminal.

Un exemple de sortie du

Les commandes sont numérotées, les plus récemment utilisées (celles avec les numéros les plus élevés) à la fin de la liste.

Pour voir un certain nombre de commandes, vous pouvez passer un nombre à l’historique sur la ligne de commande. Par exemple, pour voir les 10 dernières commandes que vous avez utilisées, tapez ce qui suit:

history 10

le

Vous pouvez obtenir le même résultat en canalisant l’historique à travers le commande tail. Pour ce faire, saisissez ce qui suit:

history | tail -n 10

le

Répétition des commandes

Si vous souhaitez réutiliser une commande de la liste d’historique, tapez un point d’exclamation (!) Et le numéro de la commande sans espace entre les deux.

Par exemple, pour répéter la commande numéro 37, vous devez taper cette commande:

!37

Un

Pour répéter la dernière commande, tapez deux points d’exclamation, encore une fois, sans espaces:

!!

Un

Cela peut être utile lorsque vous émettez une commande et oubliez d’utiliser sudo. Tapez sudo, un espace, les points d’exclamation doubles, puis appuyez sur Entrée.

Pour l’exemple suivant, nous avons tapé une commande qui nécessite sudo. Au lieu de retaper toute la ligne, nous pouvons enregistrer un tas de frappes et taper simplement sudo !!, comme indiqué ci-dessous:

mv ./my_script.sh /usr/local/bin/
sudo !!

Un

Ainsi, vous pouvez taper le numéro correspondant dans la liste pour répéter une commande ou utiliser les points d’exclamation doubles pour répéter la dernière commande que vous avez utilisée. Cependant, que faire si vous souhaitez répéter la cinquième ou la huitième commande?

  Comment rendre Gnome Shell convivial sous Linux

Vous pouvez utiliser un point d’exclamation, un tiret (-) et le numéro de toute commande précédente (encore une fois, sans espaces) pour la répéter.

Pour répéter la 13e commande précédente, vous devez taper ce qui suit:

!-13

Un

Recherche de commandes par chaîne

Pour répéter la dernière commande qui commence par une chaîne particulière, vous pouvez taper un point d’exclamation, puis la chaîne sans espaces, puis appuyer sur Entrée.

Par exemple, pour répéter la dernière commande qui a commencé par sudo, vous devez taper cette commande:

!sudo

Un

Il y a cependant un élément de danger à cela. Si la dernière commande qui a commencé par sudo n’est pas celle que vous pensez, vous lancerez la mauvaise commande.

Pour fournir un filet de sécurité, cependant, vous pouvez utiliser le modificateur: p (impression), comme indiqué ci-dessous:

!sudo:p

Un

Cela demande à l’historique d’imprimer la commande dans la fenêtre du terminal, plutôt que de l’exécuter. Cela vous permet de voir la commande avant de l’utiliser. Si c’est la commande souhaitée, appuyez sur la flèche vers le haut, puis appuyez sur Entrée pour l’utiliser.

Si vous souhaitez rechercher une commande contenant une chaîne particulière, vous pouvez utiliser un point d’exclamation et un point d’interrogation.

Par exemple, pour rechercher et exécuter la première commande correspondante contenant le mot «alias», vous devez taper cette commande:

!?aliases

Un

Cela trouvera toute commande contenant la chaîne «alias», quel que soit l’endroit où elle apparaît dans la chaîne.

Recherche interactive

Une recherche interactive vous permet de parcourir une liste de commandes correspondantes et de répéter celle que vous souhaitez.

Appuyez simplement sur Ctrl + r pour lancer la recherche.

Une fenêtre de terminal après

Lorsque vous tapez l’indice de recherche, la première commande correspondante apparaît. Les lettres que vous tapez apparaissent entre le backtick (`) et l’apostrophe (‘). Les commandes correspondantes sont mises à jour à mesure que vous tapez chaque lettre.

UNE

Chaque fois que vous appuyez sur Ctrl + r, vous recherchez en arrière la commande correspondante suivante, qui apparaît dans la fenêtre du terminal.

UNE

Lorsque vous appuyez sur Entrée, la commande affichée s’exécute.

le

Pour modifier une commande avant de l’exécuter, appuyez sur la touche fléchée Gauche ou Droite.

UNE

La commande apparaît sur la ligne de commande et vous pouvez la modifier.

Une commande sur la ligne de commande avec l'édition activée.

Vous pouvez utiliser d’autres outils Linux pour rechercher la liste d’historique. Par exemple, pour diriger la sortie de l’historique vers grep et rechercher les commandes contenant la chaîne «Alias», vous pouvez utiliser cette commande:

history | grep aliases

le

Modifier la dernière commande

Si vous devez corriger une faute de frappe, puis répéter la commande, vous pouvez utiliser le signe d’insertion (^) pour la modifier. C’est une excellente astuce à garder dans votre manche chaque fois que vous avez mal orthographié une commande ou que vous souhaitez en réexécuter une avec une option ou un paramètre de ligne de commande différent.

Pour l’utiliser, tapez (sans espaces) un curseur, le texte que vous souhaitez remplacer, un autre curseur, le texte par lequel vous souhaitez le remplacer, un autre curseur, puis appuyez sur Entrée.

Par exemple, supposons que vous tapez la commande suivante, en tapant accidentellement «shhd» au lieu de «sshd»:

sudo systemctl start shhd

Vous pouvez corriger cela facilement en tapant ce qui suit:

^shhd^sshd^

UNE

La commande est exécutée avec «shhd» corrigé en «sshd».

Suppression de commandes de la liste d’historique

Vous pouvez également supprimer des commandes de la liste d’historique avec l’option -d (supprimer). Il n’y a aucune raison de conserver votre commande mal orthographiée dans la liste d’historique.

  12 conseils pour la visioconférence lorsque vous travaillez à domicile

Vous pouvez utiliser grep pour le trouver, transmettre son numéro à l’historique avec l’option -d pour le supprimer, puis effectuer une nouvelle recherche pour vous assurer qu’il a disparu:

history | grep shhd
history -d 83
history | grep shhd

le

Vous pouvez également passer une gamme de commandes à l’option -d. Pour supprimer toutes les entrées de liste de 22 à 32 (inclus), tapez cette commande:

history -d 22 32

Pour supprimer uniquement les cinq dernières commandes, vous pouvez taper un nombre négatif, comme ceci:

history -d -5

Mise à jour manuelle du fichier d’historique

Lorsque vous vous connectez ou ouvrez une session de terminal, la liste d’historique est lue à partir du fichier d’historique. Dans Bash, le fichier d’historique par défaut est .bash_history.

Toutes les modifications que vous effectuez dans votre session de fenêtre de terminal en cours ne sont écrites dans le fichier historique que lorsque vous fermez la fenêtre de terminal ou que vous vous déconnectez.

Supposons que vous souhaitiez ouvrir une autre fenêtre de terminal pour accéder à la liste complète de l’historique, y compris les commandes que vous avez tapées dans la première fenêtre de terminal. L’option -a (all) vous permet de le faire dans la première fenêtre de terminal avant d’ouvrir la seconde.

Pour l’utiliser, saisissez ce qui suit:

history -a

le

Les commandes sont écrites silencieusement dans le fichier historique.

Si vous souhaitez écrire toutes les modifications apportées à la liste d’historique dans le fichier d’historique (si vous avez supprimé certaines anciennes commandes, par exemple), vous pouvez utiliser l’option -w (écriture), comme ceci:

history -w

le

Effacer la liste d’historique

Pour effacer toutes les commandes de la liste d’historique, vous pouvez utiliser l’option -c (effacer), comme suit:

history -c

historique -c dans une fenêtre de terminal

Si vous souhaitez en plus forcer ces modifications dans le fichier d’historique, utilisez l’option -w, comme ceci:

history -w

Sécurité et fichier historique

Si vous utilisez des applications qui vous obligent à saisir des informations sensibles (comme des mots de passe) sur la ligne de commande, n’oubliez pas qu’elles seront également enregistrées dans le fichier d’historique. Si vous ne souhaitez pas que certaines informations soient enregistrées, vous pouvez utiliser la structure de commande suivante pour les supprimer immédiatement de la liste d’historique:

special-app my-secret-password;history -d $(history 1)
history 5

UNE

Cette structure comprend deux commandes séparées par un point-virgule (;). Décomposons ceci:

special-app: le nom du programme que nous utilisons.
my-secret-password: Le mot de passe secret que nous devons fournir pour l’application sur la ligne de commande. C’est la fin du premier commandement.
history -d: dans la commande deux, nous invoquons l’option -d (supprimer) de l’historique. Ce que nous allons supprimer est dans la partie suivante de la commande.
$ (historique 1): Cela utilise une substitution de commande. La partie de la commande contenue dans $ () est exécutée dans un sous-shell. Le résultat de cette exécution est publié sous forme de texte dans la commande d’origine. La commande historique 1 renvoie la commande précédente. Ainsi, vous pouvez considérer la deuxième commande comme history -d «dernière commande ici».

Vous pouvez utiliser la commande history 5 pour vous assurer que la commande contenant le mot de passe a été supprimée de la liste d’historique.

Il existe cependant un moyen encore plus simple de le faire. Étant donné que Bash ignore les lignes commençant par un espace par défaut, incluez simplement un espace au début de la ligne, comme suit:

 special-app another-password
history 5

UNE

La commande avec le mot de passe n’est pas ajoutée à la liste d’historique. La raison pour laquelle cette astuce fonctionne est contenue dans le fichier .bashrc.

  Comment synchroniser des notes pour iPhone et iPad

Le fichier .bashrc

Le fichier .bashrc s’exécute chaque fois que vous vous connectez ou ouvrez une fenêtre de terminal. Il contient également des valeurs qui contrôlent le comportement de la commande d’historique. Éditons ce fichier avec gedit.

Tapez ce qui suit:

gedit .bashrc

le

Près du haut du fichier, vous voyez deux entrées:

HISTSIZE: Le nombre maximum d’entrées que la liste d’historique peut contenir.
HISTFILESIZE: limite du nombre de lignes qu’un fichier d’historique peut contenir.

Ces deux valeurs interagissent de la manière suivante:

Lorsque vous vous connectez ou démarrez une session de fenêtre de terminal, la liste d’historique est remplie à partir du fichier .bash_history.
Lorsque vous fermez une fenêtre de terminal, le nombre maximum de commandes défini dans HISTSIZE est enregistré dans le fichier .bash_history.
Si l’option shell histappend est activée, les commandes sont ajoutées à .bash_history. Si histappend n’est pas défini, .bash_history est écrasé.
Après avoir enregistré les commandes de la liste d’historique dans .bash_history, le fichier d’historique est tronqué pour ne contenir pas plus de lignes HISTFILESIZE.

Également en haut du fichier, vous voyez une entrée pour la valeur HISTCONTROL.

le

Vous pouvez définir cette valeur pour effectuer l’une des opérations suivantes:

ignorepaces: les lignes commençant par un espace ne sont pas ajoutées à la liste d’historique.
ignoredups: les commandes dupliquées ne sont pas ajoutées au fichier d’historique.
ignoreboth: active les deux.

Vous pouvez également répertorier les commandes spécifiques que vous ne souhaitez pas ajouter à votre liste d’historique. Séparez-les par deux points (:) et mettez-les entre guillemets («…»).

Vous suivrez cette structure pour ajouter une ligne à votre fichier .bashrc et remplacer les commandes que vous souhaitez ignorer:

export HISTIGNORE="ls:history"

Un

Utilisation des horodatages

Si vous souhaitez ajouter des horodatages à la liste d’historique, vous pouvez utiliser le paramètre HISTIMEFORMAT. Pour ce faire, ajoutez simplement une ligne comme celle-ci à votre fichier .bashrc:

export HISTTIMEFORMAT="%c "

Notez qu’il y a un espace avant les guillemets fermants. Cela empêche l’horodatage d’atteindre les commandes de la liste des commandes.

Un

Désormais, lorsque vous exécutez la commande d’historique, vous voyez la date et l’horodatage. Notez que toutes les commandes qui figuraient dans la liste d’historique avant l’ajout des horodatages seront horodatées avec la date et l’heure de la première commande qui reçoit un horodatage. Dans l’exemple ci-dessous, il s’agissait de la commande 118.

Une liste d'historique avec des horodatages dans une fenêtre de terminal.

C’est un horodatage très long. Cependant, vous pouvez utiliser des jetons autres que% c pour l’affiner. Les autres jetons que vous pouvez utiliser sont:

% d: jour
% m: mois
% y: année
% H: heure
% M: minutes
% S: secondes
% F: date complète (format année-mois-date)
% T: Heure (format heure: minutes: secondes)
% c: horodatage complet (format jour-date-mois-année et heure: minutes: secondes)

Expérimentons et utilisons quelques jetons différents:

export HISTTIMEFORMAT="%d n%m %T "

L'export HISTTIMEFORMAT =

La sortie utilise le jour, le mois et l’heure.

Une liste d'historique avec des horodatages dans une fenêtre de terminal.

Si nous supprimons le jour et le mois, cela affichera simplement l’heure.

Toutes les modifications que vous apportez à HISTIMEFORMAT s’appliquent à l’ensemble de la liste d’historique. Ceci est possible car l’heure de chaque commande est stockée comme nombre de secondes depuis l’époque Unix. La directive HISTTIMEFORMAT spécifie simplement le format utilisé pour rendre ce nombre de secondes dans un style lisible par l’homme, tel que:

export HISTTIMEFORMAT="%T "

le

Notre production est désormais plus gérable.

Une liste d'historique avec des horodatages dans une fenêtre de terminal.

Vous pouvez également utiliser la commande history pour auditer. Parfois, l’examen des commandes que vous avez utilisées dans le passé peut vous aider à identifier ce qui a pu causer un problème.

Tout comme vous pouvez dans la vie, sous Linux, vous pouvez utiliser la commande history pour revivre les bons moments et apprendre des mauvais.