GNU/Linux >> Tutoriels Linux >  >> Linux

La commande d'historique sous Linux expliquée en profondeur

Lorsque vous utilisez fréquemment la ligne de commande Linux, l'utilisation efficace de la commande history peut être un gain de productivité majeur.

Sous Linux, il existe une commande très utile pour vous montrer toutes les dernières commandes qui ont été récemment utilisées. La commande s'appelle simplement history .

Afficher l'horodatage

Généralement, lorsque vous tapez history en ligne de commande, par défaut, vous voyez un nombre suivi des commandes que vous avez utilisées récemment. À des fins d'audit, il peut être avantageux d'afficher l'horodatage avec la commande, comme indiqué ci-dessous.

Pour activer l'horodatage dans history sortie de la commande, vous devez configurer le HISTTIMEFORMAT Variable bash.

export HISTTIMEFORMAT="%F %T "
history | more
1  2020-06-25 19:02:39 systemctl restart network
2  2020-06-25 19:02:43 exit
3  2020-06-25 19:02:47 id
4  2020-06-25 19:02:56 cat /etc/hosts

Rechercher l'historique des commandes

Il s'agit peut-être de la fonctionnalité la plus fréquemment utilisée de l'history commande . Lorsque vous avez déjà exécuté une commande très longue, vous pouvez simplement rechercher l'historique à l'aide d'un mot clé et réexécuter la même commande sans avoir à la saisir entièrement.

  1. Appuyez sur Control+R et tapez le mot-clé.
  2. Appuyez sur Entrée lorsque vous voyez votre commande, qui exécutera la commande à partir de l'historique.

Dans l'exemple suivant, j'ai recherché host , qui affichait la commande précédente cat /etc/hosts dans l'historique qui contenait le mot host .

(reverse-i-search)`host': cat /etc/hosts
cat /etc/hosts
#<ip-address>	<hostname.domain.org>	<hostname>
127.0.0.1	localhost.localdomain	localhost	server1
::1		localhost.localdomain	localhost	server1

Parfois, vous souhaitez modifier une commande de l'historique avant de l'exécuter. Par exemple, vous pouvez rechercher systemctl , qui affichera systemctl restart network depuis l'historique des commandes, sélectionnez cette commande (en appuyant sur ESC clé) et modifiez le restart pour stop .

Puis réexécutez-le à nouveau en appuyant simplement sur Enter .

(reverse-i-search)`systemctl': systemctl stop network
systemctl stop network

Répéter la dernière commande exécutée

Parfois, vous pouvez finir par répéter les commandes précédentes pour diverses raisons. Voici les 4 façons différentes de répéter la dernière commande exécutée.

  1. Utilisez la up arrow pour afficher la commande précédente et appuyez sur Entrée pour l'exécuter.
  2. Tapez !! et appuyez sur entrée depuis la ligne de commande
  3. Tapez !-1 et appuyez sur Entrée depuis la ligne de commande.
  4. Appuyez sur Control+P affichera la commande précédente, appuyez sur Entrée pour l'exécuter.

Exécuter une commande spécifique

Dans l'exemple suivant, si vous souhaitez répéter la commande #4, vous pouvez faire !4 comme indiqué ci-dessous.

history | more
systemctl restart network
exit
id
cat /etc/hosts
!4
cat /etc/hosts
#<ip-address>	<hostname.domain.org>	<hostname>
127.0.0.1	localhost.localdomain	localhost	server1
::1		localhost.localdomain	localhost	server1

Exécuter la commande précédente qui commence par un mot spécifique

Tapez ! suivi des premières lettres de la commande que vous souhaitez réexécuter. Dans l'exemple suivant, en tapant !ps et enter, exécuté la commande précédente commençant par ps , qui est ps aux | grep yp .

!ps
ps aux | grep yp
root     16947  0.0  0.1  36516  1264 ?        Sl   13:10   0:00 ypbind
root     17503  0.0  0.0   4124   740 pts/0    S+   19:19   0:00 grep yp

Limiter le nombre d'éléments d'historique

Ceci est contrôlé par le HISTSIZE et HISTFILESIZE variables de shell Bash intégrées. Ajoutez les deux lignes suivantes à votre ~/.bashrc fichier et déconnectez-vous, puis reconnectez-vous.

HISTSIZE=1500
HISTFILESIZE=1500

En conséquence, maintenant history est configuré pour stocker 1500 commandes.

Modifier le nom du fichier d'historique

Par défaut, history est stocké dans ~/.bash_history fichier.

Ajoutez la ligne suivante au .bash_profile fichier et reconnectez-vous au shell Bash, pour stocker la commande d'historique dans .my_commandline fichier au lieu de .bash_history fichier.

HISTFILE=/root/.my_commandline

Ceci est utilisé lorsque vous souhaitez suivre les commandes exécutées à partir de différents terminaux en utilisant un nom de fichier d'historique différent.

Éliminer l'entrée répétée continue de l'historique

Dans l'exemple suivant pwd a été tapé trois fois, lorsque vous faites l'historique, vous pouvez voir les 3 occurrences continues de celui-ci. Pour éliminer les doublons, définissez HISTCONTROL à ignoredups comme indiqué ci-dessous.

history | tail -4
44  pwd
45  pwd
46  pwd
47  history | tail -4
export HISTCONTROL=ignoredups
history | tail -3
56  export HISTCONTROL=ignoredups
57  pwd
58  history | tail -4

Effacer les doublons dans tout l'historique

Les ignoredups ci-dessus supprime les doublons uniquement s'il s'agit de commandes consécutives. Pour éliminer les doublons sur tout l'historique, définissez le HISTCONTROL à erasedups comme indiqué ci-dessous.

export HISTCONTROL=erasedups
pwd
systemctl restart network
history | tail -3
38  pwd
39  systemctl restart network
40  history | tail -3
ls -l
systemctl restart network
history | tail -6
35  export HISTCONTROL=erasedups
36  pwd
37  history | tail -3
38  ls -l
39  systemctl restart network
40  history | tail -6

Forcer l'historique à ne pas se souvenir d'une commande particulière

Lorsque vous exécutez une commande, vous pouvez instruire history pour ignorer la commande en définissant HISTCONTROL à ignorespace et en tapant un espace devant la commande comme indiqué ci-dessous.

Je peux voir beaucoup d'administrateurs système juniors s'enthousiasmer à ce sujet, car ils peuvent masquer une commande de l'historique. Il est bon de comprendre comment ignorespace œuvres. Mais, en tant que bonne pratique, ne cachez pas délibérément quoi que ce soit de l'histoire.

export HISTCONTROL=ignorespace
ls -ltr
pwd
 systemctl restart network #Note that there is a space at the beginning of service, to ignore this command from history
history | tail -3
67  ls -l
68  pwd
69  history | tail -3

Effacer tout l'historique précédent

Parfois, vous voudrez peut-être effacer tout l'history précédent , mais que vous souhaitez faire avancer l'historique.

history -c

Remplacer les mots des commandes d'historique

Lorsque vous effectuez une recherche dans l'history , vous voudrez peut-être exécuter une commande différente mais utiliser le même paramètre de la commande que vous venez de rechercher.

Dans l'exemple ci-dessous, le !!:$ à côté du vi commande obtient l'argument de la commande précédente à la commande actuelle.

ls nginx.conf
nginx.conf
vi !!:$
vi nginx.conf

Dans l'exemple ci-dessous, le !^ à côté de la commande vi obtient le premier argument de la commande précédente (c'est-à-dire cp commande) à la commande actuelle (c'est-à-dire vi commande).

cp nginx.conf nginx.conf.bak
vi  !^
vi nginx.conf

Remplacer un argument spécifique par une commande spécifique

Dans l'exemple ci-dessous, !cp:2 recherche la commande précédente dans l'historique qui commence par cp et prend le deuxième argument de cp et le remplace par la commande ls -l comme indiqué ci-dessous.

cp ~/longname.txt /really/a/very/long/path/long-filename.txt
ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt

Dans l'exemple ci-dessous, !cp:$ recherche la commande précédente dans l'historique qui commence par cp et prend le dernier argument (dans ce cas, qui est également le deuxième argument comme indiqué ci-dessus) de cp et le remplace par la commande ls -l comme indiqué ci-dessous.

ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt

Désactiver l'utilisation de l'historique

Si vous souhaitez désactiver l'history tous ensemble et que vous ne voulez pas que le shell Bash se souvienne des commandes que vous avez tapées, définissez le HISTSIZE à 0 comme indiqué ci-dessous.

export HISTSIZE=0

Ignorer les commandes spécifiques de l'historique

Parfois, vous ne voudrez peut-être pas encombrer votre historique avec des commandes de base telles que pwd et ls . Utilisez HISTIGNORE pour spécifier toutes les commandes que vous souhaitez ignorer de l'historique.

Veuillez noter que l'ajout de ls à l'HISTIGNORE ignore uniquement ls et non ls -l . Vous devez donc fournir la commande exacte que vous souhaitez ignorer de l'historique.

export HISTIGNORE="pwd:ls:ls -ltr:"
pwd
ls
ls -l
systemctl restart network
history | tail -3
79  export HISTIGNORE="pwd:ls:ls -l:"
80  systemctl restart network
81  history
[Note that history did not record pwd, ls and ls -l]

Pour en savoir plus sur l'history commande sous Linux, consultez sa page de manuel.


Linux
  1. Commande Linux mv

  2. Linux du command

  3. Commande IP Linux

  4. Commande cd Linux

  5. Commande d'historique Linux

Commande Tr sous Linux expliquée avec des exemples

Explication de la commande procinfo sous Linux

Commande source sur Linux expliquée

Commande d'écran sur Linux expliquée

Explication de la commande Arping sur Linux

Commande d'historique sous Linux - Afficher l'historique du terminal Linux