Il existe deux variables qui contrôlent la taille de l'historique:
HISTFILESIZE Le nombre maximum de lignes contenues dans le fichier historique. Lorsque cette variable se voit affecter une valeur, le fichier historique est tronqué, si nécessaire, pour ne pas contenir plus que ce nombre de lignes en supprimant les entrées les plus anciennes. Le fichier d'historique est également tronqué à cette taille après l'avoir écrit à la fermeture d'un shell. Si la valeur est 0, le fichier d'historique est tronqué à une taille nulle. Les valeurs non numériques et les valeurs numériques inférieures à zéro empêchent la troncature. Le shell définit la valeur par défaut sur la valeur de HISTSIZE après avoir lu les fichiers de démarrage.
et
HISTSIZE Le nombre de commandes à retenir dans l'historique des commandes (voir HISTORIQUE ci-dessous). Si la valeur est 0, les commandes ne sont pas enregistrées dans la liste d'historique. Des valeurs numériques inférieures à zéro entraînent l'enregistrement de chaque commande dans la liste d'historique (il n'y a pas de limite). Le shell définit la valeur par défaut à 500 après avoir lu tous les fichiers de démarrage.
Ces deux variables vous permettent de contrôler le comportement de votre historique. Fondamentalement, il HISTSIZE
s'agit du nombre de commandes enregistrées au cours de votre session en cours et HISTFILESIZE
du nombre de commandes qui seront mémorisées d'une session à l'autre. Ainsi, par exemple:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
Dans l'exemple ci-dessus, étant donné qu'il HISTSIZE
est défini sur 10, history
renvoie une liste de 10 commandes. Cependant, si vous vous déconnectez puis vous reconnectez, history
ne renverra que 5 commandes car HISTFILESIZE
est défini sur 5. En effet, une fois que vous quittez votre session, vos HISTFILESIZE
lignes de votre historique sont enregistrées dans votre fichier d'historique ( ~/.bash_history
par défaut mais contrôlé par HISTFILE
). En d'autres termes, les commandes sont ajoutées HISTFILE
jusqu'à ce que cela atteigne les $HISTFILESIZE
lignes à quel point, chaque ligne suivante ajoutée signifie que la première commande du fichier sera supprimée.
Vous pouvez définir les valeurs de ces variables dans votre ~/.profile
(ou ~/.bash_profile
si ce fichier existe). Ne les définissez pas dans votre ~/.bashrc
premier car ils n'y ont rien à faire et deuxièmement parce que cela entraînerait un comportement différent dans les shells de connexion par rapport aux shells sans connexion, ce qui peut entraîner d' autres problèmes .
D'autres variables utiles qui vous permettent d'affiner le comportement de votre historique sont:
HISTIGNORE
: Cela vous permet d'ignorer certaines commandes courantes qui sont rarement intéressantes. Par exemple, vous pouvez définir:
export HISTIGNORE="pwd:df:du"
Cela entraînerait que toute commande commençant par pwd
, df
ou du
soit ignorée et non enregistrée dans votre historique.
HISTCONTROL
: Celui-ci vous permet de choisir le fonctionnement de l'historique. Personnellement, je l'ai défini pour HISTCONTROL=ignoredups
qu'il ne sauvegarde les commandes dupliquées qu'une seule fois. Les autres options consistent ignorespace
à ignorer les commandes commençant par un espace, erasedups
ce qui entraîne la suppression de toutes les lignes précédentes correspondant à la ligne actuelle de la liste d'historique avant l'enregistrement de cette ligne. ignoreboth
est un raccourci pour ignorespace et ignoredups.
HISTTIMEFORMAT
: Cela vous permet de définir le format d'heure du fichier d'historique. Voir la réponse de Pandya ou lire man bash
pour plus de détails.
Pour un réglage plus fin, vous avez:
L' histappend
option bash. Cela peut être défini en exécutant shopt -s histappend
ou en ajoutant cette commande à votre ~/.bashrc
. Si cette option est définie
la liste d'historique est ajoutée au fichier nommé par la valeur de la variable HISTFILE lorsque le shell se ferme, plutôt que d'écraser le fichier.
Ceci est très utile car il vous permet de combiner les historiques de différentes sessions (pensez à différents terminaux par exemple).
La history
commande a deux options utiles:
Vous pouvez, par exemple, ajouter ces deux commandes à votre PROMPT_COMMAND
(qui est exécutée chaque fois que votre shell affiche l'invite, donc chaque fois que vous démarrez un nouveau shell et après chaque commande que vous y exécutez):
export PROMPT_COMMAND='history -a;history -r;'
Combinés, ils garantissent que tout nouveau terminal que vous ouvrirez importera immédiatement l'historique de toutes les autres sessions shell. Le résultat est un historique commun à tous les terminaux / sessions shell.