Mise à jour : Debian 10 Buster/sid
Ce document décrit comment configurer et utiliser l'historique des commandes saisies dans un terminal.
Sommaire
Par défaut, les commandes tapées dans un terminal sont conservées en mémoire, puis enregistrées dans un fichier historique situé en ~/.bash_history (un par utilisateur et un pour l'administrateur), lors de la fermeture du shell.
La configuration de stockage (taille, commandes sauvegardées, .... ) peut être modifiée par des paramètres présents dans les fichiers de démarrage du shell.
Par défaut, le fichier ~/.bashrc d'un utilisateur comprend les options suivantes
En cas de saisies identiques consécutives, ne stocker que la première occurrence d'une ligne de commande, ne pas stocker les lignes de commande démarrant par un espace (utile pour les commandes confidentielles comportant par exemple des mots de passe saisis en clair)
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
Lors de la fermeture du shell, ajouter l'historique courant au fichier historique, ne pas le remplacer
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=2000
HISTFILESIZE=5000
Les fonctions suivantes sont non présentes dans le fichier par défaut ~/.bashrc utilisateur
Ajouter au fur et à mesure les commandes dans le fichier historique, de façon qu'elles soient disponibles dans les autres terminaux
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Explication : Chaque fois qu'une commande est entrée,
ajouter l'historique de la console au fichier historique : history -a
puis effacer l'historique de la console : history -c
puis recharger l'historique du fichier historique dans la console : history -r
Après avoir modifié un ou des fichiers de démarrage du shell, fermer et réouvrir le terminal pour faire prendre en compte les modifications ou utiliser la commande source suivie du nom du fichier de démarrage modifié.
ctrl p : remonter dans l'historique
ctrl n : redescendre dans l'historique
Affichage de tout l'historique des commandes
$ history
1 nano /etc/apt/sources.list
2 cat /etc/apt/sources.list
3 uname -r
4 echo test
5 history
Affichage des 3 dernières lignes de l'historique
$ history 3
4 echo test
5 history
6 history 3
Suppression de la ligne 4 dans l'historique affiché
$ history -d 4
Suppression de l'historique de la console
$ history -c
$ history -c && history w
exit
La commande history -w a pour objet d'écrire les modifications dans le fichier .bash_history. Tous les terminaux doivent être fermés pour que la modification ait lieu.
Rechercher une commande commençant par nano dans l'historique
Taper ctrl r, suivi du début de la commande. L'autocompletion affiche la première commande possible dans l'historique.
Utiliser ctrl r à nouveau pour faire défiler les commandes précédentes possibles.
ctrl s permet de revenir en avant en cas de dépassement.
(reverse-i-search)`nano ': sudo nano /etc/apt/sources.list
On suppose que l'historique contient :
$ history
1 nano /etc/apt/sources.list
2 cat /etc/apt/sources.list
3 uname -r
4 echo test
$ !!
echo test
test
Ré-exécuter la dernière commande avec les superprivilèges
$ sudo !!
Ré-exécuter la dernière commande commençant par unam
$ !unam
uname -r
4.9.0-3-amd64
Ré-exécuter la dernière commande finissant par sources.list
$ !?sources.list
cat /etc/apt/sources.list
# sources.list stretch
........
Ré-exécuter la dernière commande contenant sources
$ !?sources?
cat /etc/apt/sources.list
# sources.list stretch
......
Ré-exécuter la commande numéro 4
$ !4
echo test
test
Ré-exécuter la dernière commande en substituant test par bonjour
$ echo test
test
$ ^test^bonjour^
echo bonjour
bonjour
Dans la dernière commande, :0, :1, :2, etc.... désignent le premier mot, le second mot, le troisième mot, etc...
$ nano nom_fichier-compliqué
$ cat !!:1
cat nom_fichier_compliqué
.......
Peut aussi s'écrire :
$ cat !!^
Ré-exécuter la dernière commande commençant par nano en utilisant le second mot :
$ cat !nano^
cat nom_fichier-compliqué
.......