Lorsqu’une commande est exécutée dans le terminal, elle est stockée dans l’historique.
Appuyer sur la touche “Flèche vers le haut” pour afficher la commande précédente.
Une autre possibilité est d’utiliser Ctrl + r pour chercher une commande dans l’historique (à partir de la fin).
Pour afficher l’historique complet, utiliser la commande history
$ history
1 ls /var/log
2 whoami
3 pwd
4 ls
5 uname -r
6 uname -v
7 bash --version
8 exit
9 pwd
10 ls
11 exit
12 clear
13 history
Ou pour afficher les 10 dernières:
$ history 10
Pour ré-exécuter la commande n°9 dans l’historique, on peut utiliser l’expansion d’historique de bash:
taper !9
et presser entrée. La commande est affichée puis exécutée.
$ !9
pwd
/home/christine
Pour ré-exécuter la dernière commande, il y a un raccourci: !!
.
Pour executer une commande sans l’ajouter à l’historique,
ajouter au moins un espace en début de ligne : cmd
!! | La dernière commande de l'historique!! est couramment appelé "bang bang"
|
---|---|
!11 | La commande n°11 de l'historique |
!-2 | L'avant-dernière commande de l'historique |
!ssh | La dernière commande qui commence par "ssh" |
!?apt-get | La dernière commande qui contient "apt-get" |
!# | La commande en coursecho a !# execute echo aecho a (affiche "aecho a") |
On peut ajouter des “filtres” à ces expansions:
!!:p | Afficher la dernière commande executée |
---|---|
!11:- | Executer la commande n°11 en supprimant le dernier argument
|
!11:s/abc/def | Executer la commande n°11 et remplacer la PREMIERE occurence de "abc" en "def" Il est possible de cumuler les substitutions
|
!11:gs/abc/def | Executer la commande n°11 et remplacer TOUTES les occurences de "abc" en "def" |
Raccourcis pour la dernière commande:
^acb^def | Executer la dernière commande et remplacer la première occurence de "abc" en "def" Particulièrement utile pour les fautes de frappe
|
---|
!:* | Tous les arguments de la dernière commande |
---|---|
!611:* | Tous les arguments de la commande n°611 |
!-2:* | Tous les arguments de l'avant-dernière commande |
On peut cibler différentes commandes de l’historique de la même manière qu’avec *
pour les expansions de paramètre qui suivent :
!11:$ | Le dernier argument de la commande n°11
|
---|---|
!11:^ | Le premier argument de la commande 11 |
!11:$:h | Le dernier argument de la commande n°11, en supprimant le nom de fichier du path (= récupérer ce qui est avant le dernier /)
|
!11:$:t | Le dernier argument de la commande n°11, en supprimant le nom de dossier du path (= récupérer ce qui est après le dernier /)
|
!11:$:r | Le dernier argument de la commande n°11, en supprimant l'extension du fichier (= récupérer ce qui est avant le dernier .)
|
!11:$:e | Le dernier argument de la commande n°11, uniquement l'extension du fichier (= récupérer ce qui est après le dernier .)
|
!11:$:t:r | Le dernier argument de la commande n°11, uniquement le nom de fichier moins l'extension (= récupérer ce qui est après le dernier / et avant le dernier .)
| </td>
!11:2 | Le 2ème argument de la commande n°11 |
!11:3-5 | Les arguments 3 à 5 (= 3,4,5) de la commande n°11 |
!11:3* | De l'argument 3 au dernier argument (= de 3 à n) de la commande n°11 |
!11:3- | De l'argument 3 à l'avant-dernier argument (= de 3 à n-1) de la commande n°11 |
L’historique existe uniquement en mémoire et c’est au moment de se déconnecter, qu’il est sauvegardé
dans le fichier ~/.bash_history
Il est possible de forcer l’écriture de l’historique en mémoire dans le fichier:
$ history -w
On peut supprimer l’historique en mémoire:
$ history -c
$ history
1 history
Notons que le fichier lui n’est pas vidé:
$ cat .bash_history
ls /var/log
whoami
pwd
ls
uname -r
uname -v
bash --version
exit
pwd
ls
exit
clear
history
pwd
clear
cat .bash_history
history
history -w
Pour supprimer la commande n°11 de l’historique:
$ history -d 11
Pour supprimer les commandes 10 à 20:
$ for i in {10..20}; do history -d 10; done
HISTFILE: emplacement du fichier history
$ echo $HISTFILE
/home/am/.bash_history
HISTFILESIZE: nombre maximum de lignes dans le fichier history
$ echo $HISTFILESIZE
2000
HISTSIZE: nombre maximum de lignes gardé en mémoire
$ echo $HISTSIZE
1000