Combien de temps dure le contenu du fichier .bash_history?

11

Comment puis-je modifier le contenu de mon bash_historyfichier? Quelles valeurs ou variables contrôlent la durée de l'historique? Y a-t-il d'autres choses que je peux changer pour mieux contrôler mon historique BASH ??

nbro
la source
2
Je ne crois pas que ce fichier est contrôlé par la durée, mais plutôt par la taille ultime du fichier. Voir ici: Existe - t-il un moyen de définir la taille de la liste d'historique dans bash sur plus de 5000 lignes? . Donc l'env. variables HISTSIZEet HISTFILESIZEsont les seules surfaces de contrôle dont vous disposez pour contrôler la quantité d'historique conservée.
slm

Réponses:

12

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:

    • history -a : provoque l'écriture automatique de la dernière commande dans le fichier historique

    • history -r : importe le fichier historique dans la session en cours.

    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.

terdon
la source
2

La taille par défaut du fichier historique est de 500 lignes. Une fois que le fichier .bash_history atteint 500 lignes, les premières entrées sont éliminées pour faire de la place aux lignes plus récentes, comme dans FIFO. Vous pouvez changer cela en changeant la valeur de la variable HISTFILESIZEqui par défaut a la valeur 500.

Mettre un HISTFILESIZE=10000dans votre .bashrc augmentera le nombre de lignes que le fichier historique peut contenir à 10000, augmentant ainsi la durée de vie de son contenu.

Lumières de la ville
la source
2
remarque: si vous augmentez HISTSIZEla limite, pensez HISTFILEaussi à changer . Si vous exécutez bash --norc HISTSIZEreviendra à la valeur par défaut, tronquer votre HISTFILEà la sortie.
llua
Merci, @llua. De même, si votre système /etc/bash.bashrcdéfinit un HISTFILESIZE(ou peut-être HISTSIZE; je n'ai pas vérifié lequel), alors Bash semble tronquer .bash_historyau moment où il lit /etc/bash.bashrc(ou au moins à un moment donné avant que votre nouvelle limite ne soit définie dans vos propres fichiers d'initialisation Bash). Pour éviter cela, encore une fois, définissez le vôtre HISTFILEafin que votre historique réel y soit et non dans le .bash_historyfichier que Bash tronque.
Chris Povirk
(Mais ne le faites pas export, car cela le rendrait visible pour tous les obus enfants, qui pourraient alors chercher à le tronquer au lieu de .bash_history!)
Chris Povirk
0

Lisez man bashpour plus de détails sur l' histoire de bash comme:

HISTCONTROL
       Une liste de valeurs séparées par deux-points contrôlant la façon dont les commandes sont enregistrées dans la liste d'historique.
       Si la liste de valeurs inclut ignorer l'espace, les lignes qui commencent par un caractère espace sont
       non enregistré dans la liste d'historique. Une valeur ignorée entraîne des lignes correspondant à la précédente
       l'entrée d'historique ne doit pas être enregistrée. Une valeur de ignoreboth est un raccourci pour ignorer l'espace et
       ignoredups. Une valeur de gommes effacées fait que toutes les lignes précédentes correspondant à la ligne actuelle
       être supprimé de la liste d'historique avant que cette ligne ne soit enregistrée. Toute valeur ne figurant pas ci-dessus
       la liste est ignorée. Si HISTCONTROL n'est pas défini ou n'inclut pas de valeur valide, toutes les lignes
       lues par l'analyseur shell sont enregistrées dans la liste d'historique, sous réserve de la valeur de HISTIG‐
       NORE. La deuxième ligne et les lignes suivantes d'une commande composée à plusieurs lignes ne sont pas testées,
       et sont ajoutés à l'historique quelle que soit la valeur de HISTCONTROL.
HISTFILE
       Le nom du fichier dans lequel l'historique des commandes est enregistré (voir HISTORIQUE ci-dessous). Le défaut
       la valeur est ~ / .bash_history. S'il n'est pas défini, l'historique des commandes n'est pas enregistré à la fermeture d'un shell.
HISTFILESIZE
       Le nombre maximum de lignes contenues dans le fichier historique. Lorsque cette variable est affectée
       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 historique est également tronqué à cette taille
       après l'avoir écrit à la sortie d'un shell. Si la valeur est 0, le fichier historique est tronqué à
       taille zéro. 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.
HISTIGNORE
       Une liste de motifs séparés par deux-points pour décider sur quelles lignes de commande doivent être enregistrées
       la liste historique. Chaque motif est ancré au début de la ligne et doit correspondre
       la ligne complète (aucun «*» implicite n'est ajouté). Chaque modèle est testé par rapport à la ligne
       après les contrôles spécifiés par HISTCONTROL sont appliqués. En plus de la coque normale
       caractères correspondant au modèle, `& 'correspond à la ligne d'historique précédente. `& 'peut être échappé
       en utilisant une barre oblique inverse; la barre oblique inverse est supprimée avant de tenter une correspondance. Le deuxième et
       les lignes suivantes d'une commande composée à plusieurs lignes ne sont pas testées et sont ajoutées à la
       quelle que soit la valeur de HISTIGNORE.
HISTSIZE
       Le nombre de commandes à retenir dans l'historique des commandes (voir HISTORIQUE ci-dessous). Si la
       la valeur est 0, les commandes ne sont pas enregistrées dans la liste d'historique. Valeurs numériques inférieures à zéro
       entraîner la sauvegarde de chaque commande dans la liste d'historique (il n'y a pas de limite). La coquille
       définit la valeur par défaut à 500 après avoir lu les fichiers de démarrage.
HISTTIMEFORMAT
       Si cette variable est définie et non nulle, sa valeur est utilisée comme chaîne de format pour strftime (3)
       pour imprimer l'horodatage associé à chaque entrée d'historique affichée par l'historique
       intégré. Si cette variable est définie, des horodatages sont écrits dans le fichier historique afin qu'ils puissent
       être préservé à travers les sessions shell. Il utilise le caractère de commentaire historique pour distinguer
       horodatages guish d'autres lignes de l'histoire.

Particulièrement HISTFILESIZEet HISTSIZEque vous cherchiez et vous aide.

Pandya
la source