Historique des commandes


Mise à jour : Debian 10 Buster/sid

Ce document décrit comment configurer et utiliser l'historique des commandes saisies dans un terminal.

Sommaire

1 - Configuration

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.

1.1 - Configuration utilisateur standard

Par défaut, le fichier ~/.bashrc d'un utilisateur comprend les options suivantes

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# 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

1.2 - Configuration avancée

Les fonctions suivantes sont non présentes dans le fichier par défaut ~/.bashrc utilisateur

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Explication : Chaque fois qu'une commande est entrée,

1.3 - Prises en compte des modifications

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é.

2 - Utilisation de l'historique

2.1 - Affichage et suppression des commandes de l'historique

ctrl p : remonter dans l'historique
ctrl n : redescendre dans l'historique
$ history
1 nano /etc/apt/sources.list
2 cat /etc/apt/sources.list
3 uname -r
4 echo test
5 history
$ history 3
4 echo test
5 history
6 history 3
$ history -d 4 
$ 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.

2.2 - Rechercher une commande avec ctrl r / ctrl s

Rechercher une commande commençant par nano dans l'historique

(reverse-i-search)`nano ': sudo nano /etc/apt/sources.list

2.3 - Re-exécuter une commande avec !

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
$ sudo !!
$ !unam
uname -r
4.9.0-3-amd64
$ !?sources.list
cat /etc/apt/sources.list
# sources.list stretch
........
$ !?sources?
cat /etc/apt/sources.list
# sources.list stretch
......
$ !4
echo test
test

2.4 - Ré-exécuter la dernière commande en changeant un terme avec ^

$ echo test
test
$ ^test^bonjour^
echo bonjour
bonjour

2.5 - Ré-exécuter une commande en conservant des termes avec :

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 !!^
    $ cat !nano^
cat nom_fichier-compliqué
.......