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
history [nombre de lignes]
Nous pouvons donc afficher tout l’historique ou un certain nombres de lignes depuis la plus récente.
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.
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
!!
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.
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é.
!<index>
Commençons par afficher l’historique et rappelons une commande.
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é.
!<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:
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.
<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 !$
.
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 !*
.
<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).
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…
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…
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.
history -d <index>
Par exemple, pour supprimer la ligne 20…
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
Vous devez vous connecter pour publier un commentaire.