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 HISTSIZEs'agit du nombre de commandes enregistrées au cours de votre session en cours et HISTFILESIZEdu 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 HISTSIZEest défini sur 10, historyrenvoie une liste de 10 commandes. Cependant, si vous vous déconnectez puis vous reconnectez, historyne renverra que 5 commandes car HISTFILESIZEest défini sur 5. En effet, une fois que vous quittez votre session, vos HISTFILESIZElignes de votre historique sont enregistrées dans votre fichier d'historique ( ~/.bash_historypar défaut mais contrôlé par HISTFILE). En d'autres termes, les commandes sont ajoutées HISTFILEjusqu'à ce que cela atteigne les $HISTFILESIZElignes à 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_profilesi ce fichier existe). Ne les définissez pas dans votre ~/.bashrcpremier 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, dfou dusoit 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=ignoredupsqu'il ne sauvegarde les commandes dupliquées qu'une seule fois. Les autres options consistent ignorespaceà ignorer les commandes commençant par un espace, erasedupsce 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. ignorebothest 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 bashpour plus de détails.
Pour un réglage plus fin, vous avez:
L' histappendoption bash. Cela peut être défini en exécutant shopt -s histappendou 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 historycommande 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.