Bien utiliser l’historique des commandes dans BASH
La commande history de Bash

Bien utiliser l’historique des commandes dans BASH

Bash qui est l’interpréteur en ligne de commande le plus répandu sous Linux de nos jour dispose d’une commande de base bien pratique pour parcourir et même réutiliser les commandes que nous avons précédemment utilisées. Pour ce faire Bash enregistre nos commandes dans un historique et le sauvegarde même à la fermeture de session.

Il nous est donc possible d’en profiter pour gagner du temps en y faisant appel, mais il peut être aussi judicieux de garder un œil dessus pour ne pas que des informations sensibles n’y trainent.

Afficher l’historique des commandes

Afficher l’historique des commandes Bash
history [nombre de lignes]

Nous pouvons donc afficher tout l’historique ou un certain nombres de lignes depuis la plus récente.

Exemple
steve@just-sudo-it:~$ history
    1  exit
    2  mkdir -p projects/sources
    3  cd projects/sources/
    4  git clone https://github.com/sdejongh/jinjacraft.git
    5  cd jinjacraft/
    6  ls
    7  cd
    8  cat projects/sources/jinjacraft/requirements.txt
    9  cat projects/sources/jinjacraft/README.md
   10  cat projects/sources/jinjacraft/pyproject.toml
   11  history

steve@just-sudo-it:~$

Après des heures voire des jours d’utilisation, l’historique peut être long. Il est donc parfois préférable de n’afficher qu’un nombre limité de lignes.

Afficher les cinq dernières commandes
steve@just-sudo-it:~$ history 5
   15  cat myscript.sh
   16  tree articles/
   17  uptime
   18  uname -r
   19  history 5
steve@just-sudo-it:~$

Tirer parti de l’historique

Afficher les dernières commandes c’est bien, utiliser ces informations pour gagner du temps c’est mieux! Cette historique nous permet de rappeler n’importe quelle commande, mais aussi de récupérer les arguments d’une ancienne commande pour les passer à une nouvelle… Bref de quoi sérieusement économiser la durée de vie de notre clavier.

Rappeler la dernière commande

Rappeler et exécuter la dernière commande
!!

Vous pouvez bien évidemment utiliser les flèches du clavier pour remonter dans l’historique et valider avec ENTER, mais ça reste plus lent que cette méthode.

Rappeler la dernière commande et l’exécuter
steve@just-sudo-it:~$ !!
cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      dhcp4: true
    enp0s8:
      addresses:
      - 192.168.56.142/24
      nameservers:
        addresses: []
        search: []
  version: 2
steve@just-sudo-it:~$

Rappeler une commande par son index

L’inconvénient de rappeler la dernière commande est que si vous afficher l’historique, la commande devient elle même la dernière. Et de surcroit, on peut aussi avoir besoin de remonter plus loin dans le passé.

Rappeler et exécuter une commande par son index
!<index>

Commençons par afficher l’historique et rappelons une commande.

Affichage de l’historique et rappel de la commande n°17
steve@just-sudo-it:~$ history 10
   15  cat myscript.sh
   16  tree articles/
   17  uptime
   18  uname -r
   19  history 5
   20  mkdir -p pictures/{today,yesterday,lastweek}
   21  rm -Rf pictures/{today,yesterday,lastweek}
   22  tree
   23  cat /etc/netplan/00-installer-config.yaml
   24  history 10
steve@just-sudo-it:~$
steve@just-sudo-it:~$
steve@just-sudo-it:~$ !17
uptime
 09:45:48 up 32 min,  1 user,  load average: 0,18, 0,06, 0,01
steve@just-sudo-it:~$

Rappeler une commande par son nom

Ca peut paraître étrange, mais nous pouvons aussi rappeler une commande par une chaîne de caractères. Dans ce cas, Bash réexécutera la dernière commande entrée qui commence par le texte donné.

Rappeler une commande en fonction d’une chaîne de caractères
!<texte>

Par exemple dans l’historique précédent nous avions la commande uptime à la ligne 17. Nous pouvons la rappeler aussi par du texte:

Rappel du commande par une chaîne de caractères.
steve@just-sudo-it:~$ !upt
uptime
 09:49:06 up 35 min,  1 user,  load average: 0,00, 0,02, 0,00
steve@just-sudo-it:~$

Récupérer les arguments de la dernière commande

Autre fonctionnalité très appréciable de l’historique de Bash, c’est le fait que nous pouvons récupérer non seulement une commande, mais aussi uniquement ses arguments.

Exécute une commande en récupérant le dernier argument de la précédente
<commande> !$

Par exemple la première commande crée une copie du premier fichier. Le dernier argument est donc le nom de la copie du fichier. nous pouvons donc récupérer le nom de ce fichier à l’aide de !$.

Récupérer le dernier argument de la précédente commande
steve@just-sudo-it:~$ cp docs/linux.md docs/linux.md.old
steve@just-sudo-it:~$
steve@just-sudo-it:~$ cat !$
cat docs/linux.md.old
# Ruricolae optatis pecudes

## Casus est quid

Lorem markdownum orbem: facta flectique alitibus domus consequitur Ulixem
medium? Hortos fecundis deam tibiaque quid suum tam est matrum movet genuit
ementitus. Inquit contulit trahit vernat, fida, suspirat, **paterni** monet.
Torquere ferar telo; et, et iste aequales essent teque contigit potest in
pascere arbitrium hospitibus corpora habuisse, vincla. Fuit horrifer ultra fugam
resque, **depositum poterisne parili**.

1. In tinnitibus ipsis dum
2. Imitamine loqui prospectet duceret vidit
3. Olentia arbor munera super lactantia Telamonius facit
4. Genuere Opheltes in perit numina aut vot# Ruricolae optatis pecudes
steve@just-sudo-it:~$

Nous pouvons aussi récupérer l’ensemble des arguments de la précédente commande moyennant !*.

Exécute une commande en récupérant tous les arguments de la dernière commande
<commande> !*

Par exemple nous pouvons créer une nouvelle copie du fichier, et ensuite décider de supprimer l’original et la nouvelle copie. (Ce n’est qu’un exemple sans intérêt mais qui permet de bien comprendre le principe).

Exécuter une commande en rappelant tous les arguments de la précédente commande.
steve@just-sudo-it:~$ cp docs/linux.md.old docs/linux2.md.old
steve@just-sudo-it:~$
steve@just-sudo-it:~$ rm !*
rm docs/linux.md.old docs/linux2.md.old
steve@just-sudo-it:~$

Nettoyer l’historique

Un historique trop long, ou un historique qui contient des informations sensible n’est jamais une bonne chose, un peu de nettoyage peut faire du bien.

Nous pouvons complètement purger l’historique…

Vider l’historique
history -c

Notez que cela ne vide pas le contenu du fichier ~/.bash_history dans lequel est enregistré l’historique actif à la fermeture de notre session.

Pour faire un nettoyage complet, il faut purger le fichier et l’historique de session…

Purger l’historique actif et le fichier .bash_history
cat /dev/null > ~/.bash_history
history -c

Nous pouvons aussi être plus sélectif et ne supprimer que les lignes sensibles en les référençant par index.

Supprimer une ligne de l’historique de session par index
history -d <index>

Par exemple, pour supprimer la ligne 20…

Supprimer la commande n°20 de la session courante.
steve@just-sudo-it:~$ history -d 20

Conclusion

L’historique des commandes de Bash peut nous faire gagner du temps à condition de se familiariser avec son concept. Il faut également avoir en tête que celui-ci peut contenir des informations sensibles et qu’il nous faut veiller à ce qu’elles n’y restent pas.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.