Comment utiliser la commande history sous Linux

Contenu

Une invite de terminal sur un ordinateur portable Linux.

Le shell Linux conserve un historique des commandes qu'il exécute, et vous pouvez le rechercher pour répéter les commandes que vous avez exécutées dans le passé. Une fois que vous avez compris la commande Linux history et comment l'utiliser, peut augmenter considérablement votre productivité.

Manipuler l'historique

Quoi George Santayana a dit que le célèbre, “Ceux qui ne peuvent pas se souvenir du passé sont condamnés à le répéter”. Malheureusement, fr Linux, si tu ne te souviens pas du passé, je ne peux pas le répéter, même si tu veux.

C'est alors que Linux history La commande est utile. Il vous permet de revoir et de répéter vos commandes précédentes. Ceci n'est pas destiné à promouvoir la paresse ou à gagner du temps.; il y a aussi un facteur d'efficacité (et précision) en jeu. Plus une commande est longue et compliquée, plus il sera difficile de s'en souvenir et de l'écrire sans se tromper. Il existe deux types d'erreurs: un qui empêche la commande de fonctionner et un qui permet à la commande de fonctionner, mais ça me fait faire quelque chose d'inattendu.

Les history la commande élimine ces problèmes. Comme la plupart des commandes Linux, il y a plus que tu ne le penses. Malgré cela, si vous apprenez à utiliser le history commander, peut améliorer votre utilisation de la ligne de commande Linux, tous les jours. C'est un bon investissement de votre temps. Il y a de bien meilleures façons d'utiliser history commande que d'appuyer simplement sur la flèche vers le haut à plusieurs reprises.

La maîtrise de l'histoire

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

l'histoire

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

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

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

l'histoire 10

Vous pouvez obtenir le même résultat si vous canalisez history à travers de tail commander. Pour le faire, écris ce qui suit:

l'histoire | queue -n 10

EN RELATION: Comment utiliser Pipes sur Linux

Commandes répétées

Si vous souhaitez réutiliser une commande de l'historique, écrire un point d'exclamation (!) Et le numéro de la commande sans espace au milieu.

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

!37

Pour répéter la dernière commande, écrire deux points d'exclamation, de nouveau, sans espaces:

!!

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

Pour l'exemple suivant, nous écrivons une commande qui a besoin sudo. Au lieu de réécrire toute la ligne, nous pouvons enregistrer un tas de frappes et simplement taper sudo !!, Comme indiqué ci-dessous:

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

Pour cela, vous pouvez taper le numéro correspondant dans la liste pour répéter une commande ou utiliser les doubles points d'exclamation pour répéter la dernière commande que vous avez utilisée. Malgré cela, Que faire si vous voulez répéter la cinquième ou la huitième commande?

Vous pouvez utiliser un point d'exclamation, un tiret (-) et le numéro de toute commande précédente (de nouveau, sans espaces) le répéter.

Pour répéter la treizième commande ci-dessus, vous devez écrire ce qui suit:

!-13

Rechercher des 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 appuyez sur Entrée.

Par exemple, pour répéter la dernière commande qui a commencé par sudo, écrirais-tu cette commande:

!sudo

Malgré cela, il y a un élément de danger dans ce. Si la dernière commande qui a commencé par sudo ce n'est pas qui vous pensez que c'est, vous exécuterez la mauvaise commande.

Malgré cela, fournir un filet de sécurité, vous pouvez utiliser le :p (imprimer) modificateur, comme il est montré dans ce qui suit:

!sudo:p

Cela indique history pour imprimer la commande dans la fenêtre du terminal, au lieu de l'exécuter. Cela vous permet de visualiser la commande avant de l'utiliser.. Si c'est la commande que tu veux, appuyez sur la flèche vers le haut, puis appuyez sur Entrée pour l'utiliser.

Si vous voulez trouver une commande qui contient 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 qui contient le mot “alias”, vous devez taper cette commande:

!?alias

cela trouvera toutes les commandes qui contiennent la chaîne “alias”, peu importe où il 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 voulez.

Appuyez simplement sur Ctrl + r pour lancer la recherche.

Une fenêtre de terminal après avoir appuyé sur

Pendant que vous tapez la piste de recherche, la première commande correspondante apparaîtra. Les lettres que vous tapez apparaissent entre le backtick (`) et l'apostrophe ('). Les commandes correspondantes se mettent à jour au fur et à mesure que vous tapez chaque lettre.

Une recherche

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

Quand j'appuie sur Entrée, la commande affichée sera exécutée.

Pour éditer une commande avant de l'exécuter, appuyez sur la touche fléchée gauche ou droite.

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 de l'historique. Par exemple, pour canaliser la sortie de history Dans grep Oui rechercher des commandes contenant la chaîne “Alias” vous pouvez utiliser cette commande:

l'histoire | alias grep

Modifier la dernière commande

Si vous devez corriger une faute de frappe, puis répétez la commande, vous pouvez utiliser caret (^) pour le modifier. C'est une excellente astuce pour avoir dans votre manche chaque fois que vous orthographiez mal une commande ou que vous souhaitez en relancer une avec une option ou un paramètre de ligne de commande différent.

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

Par exemple, supposons que vous tapiez la commande suivante, saisie accidentelle “shhd” au lieu de “sshd”:

sudo systemctl démarrer shhd

Vous pouvez facilement corriger cela en tapant ce qui suit:

^shhd^sshd^

La commande est exécutée avec “shhd” fixé à “sshd”.

Supprimer des commandes de la liste d'historique

De plus, vous pouvez supprimer des commandes de la liste d'historique avec le -d (supprimer) option. Il n'y a aucune raison de garder votre commande mal orthographiée dans la liste de l'historique.

Vous pouvez utiliser grep pour le trouver, transmettez votre numéro à history avec lui -d possibilité de le supprimer, puis recherchez à nouveau pour vous assurer qu'il a disparu:

l'histoire | grep chhd
histoire -d 83
l'histoire | grep chhd

Vous pouvez également passer une série de commandes au -d option. Pour supprimer toutes les entrées de la liste des 22 une 32 (compris), écrire cette commande:

histoire -d 22 32

Pour supprimer uniquement les cinq dernières commandes, tu peux écrire un nombre négatif, Donc:

histoire -d -5

Mise à jour manuelle du fichier journal

Lorsque vous vous connectez ou ouvrez une session de terminal, la liste d'historique est lue à partir du fichier d'historique. En bas, le fichier d'archive par défaut est .bash_history.

Toutes les modifications que vous apportez à la session en cours de la fenêtre du terminal ne sont écrites dans le fichier journal que lorsque vous fermez la fenêtre du 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. Les -a L'option (tout) vous permet de le faire dans la première fenêtre de terminal avant d'ouvrir la seconde.

Pour l'utiliser, écris ce qui suit:

histoire -a

Les commandes sont écrites en silence dans le fichier d'archive.

Si vous souhaitez écrire toutes les modifications de la liste d'historique dans le fichier d'historique (si vous avez supprimé d'anciennes commandes, par exemple), vous pouvez utiliser le -w (Écrire) option, Donc:

histoire -w

Supprimer la liste d'historique

Pour supprimer toutes les commandes de la liste d'historique, vous pouvez utiliser le -c (supprimer) option, de la manière suivante:

histoire -c

Si en même temps vous voulez forcer ces changements dans le fichier journal, utiliser el -w option, Donc:

histoire -w

Sécurité et historique des fichiers

Si vous utilisez une application qui vous oblige à saisir des informations confidentielles (comme mots de passe) sur la ligne de commande, rappelez-vous que cela sera également enregistré dans le fichier historique. Si vous ne souhaitez pas que certaines informations soient enregistrées, vous pouvez utiliser la structure de commande suivante pour la supprimer immédiatement de la liste de l'historique:

application-spéciale mon-mot-de-passe-secret;histoire -d $(l'histoire 1)
l'histoire 5

Cette structure comprend deux commandes séparées par des points-virgules (;). Analysons cela:

  • application spéciale: Le nom du programme que nous utilisons.
  • mon-mot-de-passe-secret: Le mot de passe secret que nous devons fournir pour l'application sur la ligne de commande. C'est la fin de la commande un.
  • histoire -d: Au commandement deux, nous invoquons le -d (supprimer) possibilité de history. Ce que nous allons supprimer est dans la partie suivante de la commande.
  • $ (enregistrer 1): Cela utilise une substitution de commande. La partie de la commande contenue dans le $() s'exécute sur une sous-couche. Le résultat de cette exécution est publié sous forme de texte dans la commande d'origine. Les history 1 commande renvoie la commande précédente. Pour cela, vous pouvez considérer la deuxième commande comme l’historique -d “dernière commande ici”.

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

Malgré cela, il y a un moyen encore plus simple de le faire. Parce que Bash ignore les lignes qui commencent par un espace par défaut, n’inclure qu’un espace au début de la ligne, de la manière suivante:

 special-app autre mot de passe
l'histoire 5

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

Le fichier .bashrc

Les .bashrc le fichier 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 du history commander. Modifions ce fichier avec gedit.

Écrivez ce qui suit:

gedit .bashrc

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

  • HISTSIZE: Le nombre maximum d'entrées que la liste d'historique peut contenir.
  • HISTFILESIZE: La limite du nombre de lignes qu'une archive peut contenir.

Ces deux valeurs interagissent des manières suivantes:

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

Également près du haut du fichier, vous verrez une entrée pour le HISTCONTROL valeur.

L'entrée

Vous pouvez déterminer cette valeur pour effectuer l'une des opérations suivantes:

  • ignorespaces:Les lignes commençant par un espace ne sont pas ajoutées à la liste d'historique.
  • ignoredups:Les commandes en double ne sont pas ajoutées au fichier historique.
  • ignoreboth:Activer les deux ci-dessus.

De plus, vous pouvez répertorier les commandes spécifiques que vous ne souhaitez pas ajouter à votre liste d'historique. Séparez-les par deux points (:) et les mettre entre guillemets ("...").

Je suivrais cette structure pour ajouter une ligne à votre .bashrc fichier et remplacez les commandes que vous souhaitez ignorer:

exporter HISTIGNORE="ls:l'histoire"

Une commande

Utiliser des horodatages

Si vous souhaitez ajouter des horodatages à la liste d'historique, vous pouvez utiliser le HISTIMEFORMAT réglage. Pour le faire, ajoutez simplement une ligne comme la suivante à votre .bashrc Record:

exporter HISTTIMEFORMAT="%c "

Notez qu'il y a un espace avant les guillemets de fermeture. Cela empêche l'horodatage de correspondre aux commandes de la liste de commandes.

Une commande

Maintenant, lorsque vous exécutez la commande history, voir la date et l'heure. Notez que toutes les commandes qui étaient dans la liste de l'historique avant d'ajouter les horodatages seront marquées avec la date et l'heure de la première commande qui reçoit un horodatage. Dans cet exemple ci-dessous, c'était la commande 118.

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

  • %d: Jour
  • %m: Mes
  • %y: Année
  • %H: Heure
  • %M: Minutes
  • %S: Secondes
  • %F: Date complète (format année-mois-date)
  • %T: Heure (format de l'heure: minutes: secondes)
  • %c: Date et heure complètes (formats jour-date-mois-année et heure: minutes: secondes)

Expérimentons et utilisons quelques jetons différents:

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

La commande HISTTIMEFORMAT = export

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

Malgré cela, si on élimine le jour et le mois, il n'affichera que l'heure.

Toutes les modifications que vous apportez à HISTIMEFORMAT appliquer à toute la liste de l'historique. Ceci est faisable car l'heure de chaque commande est stockée comme nombre de secondes depuis les jours Unix. Les HISTTIMEFORMATLa directive spécifie simplement le format utilisé pour convertir ce nombre de secondes en un style lisible par l'homme, Quoi:

exporter HISTTIMEFORMAT="%T "

La commande

Notre production est maintenant plus gérable.

Vous pouvez également utiliser le history commande pour auditer. Parfois, revoir les commandes que vous avez utilisées dans le passé peut vous aider à identifier ce qui a pu causer un obstacle.

Comme il peut dans la vie, fr Linux, vous pouvez utiliser le history Commande de revivre les bons moments et d'apprendre des mauvais.

EN RELATION: 37 Commandes Linux importantes que vous devez connaître

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.