bash HISTSIZE vs. HISTFILESIZE?
Quelle est la différence entre HISTSIZE
et HISTFILESIZE
?
ils sont utilisés pour étendre l'histoire de bash au-delà des 500 lignes par défaut.
il semble y avoir un manque de clarté ici et dans d'autres forums sur la raison pour laquelle ils sont tous les deux nécessaires. ( Exemple 1 , Exemple 2 , Exemple 3 ).
2 réponses
courte réponse:
HISTSIZE
est le nombre de lignes ou de commandes qui sont stockées en mémoire dans une liste d'histoire pendant que votre session de bash est en cours.
HISTFILESIZE
est le nombre de lignes ou de commandes qui (a) sont autorisées dans le fichier d'histoire au démarrage d'une session, et (b) sont stockées dans le fichier d'histoire à la fin de votre session de bash pour une utilisation dans les sessions futures.
noter la distinction entre fichier - sur disque - et liste - en mémoire.
longue réponse:
Toutes les infos ci-dessus + quelques exemples:
HISTFILESIZE=10
et HISTSIZE=10
- vous commencez votre session.
- votre HISTFILE (fichier qui stocke l'historique de vos commandes bash), est tronqué pour contenir HISTFILESIZE=10 lignes.
- vous écrivez 50 lignes.
- à la fin de vos 50 commandes, seules les commandes 41 à 50 sont dans votre liste historique, dont la taille est déterminée par HISTSIZE=10.
- vous terminez votre séance.
- en supposant que
histappend
n'est pas activé, les commandes 41 à 50 sont sauvegardées dans votre fichier HISTFILE qui a maintenant les 10 commandes qu'il détenait au début plus les 10 commandes nouvellement écrites. - votre HISTFILE est tronqué pour contenir HISTFILESIZE=10 lignes.
- en supposant que
- Vous avez maintenant 10 commandes dans votre histoire - les 10 dernières que vous venez de taper dans la session vient de se terminer.
- lorsque vous commencez une nouvelle session, vous recommencez à 1 avec un HISTFILE de HISTFILESIZE=10.
HISTFILESIZE=10
et HISTSIZE=5
- vous commencez votre session.
- Votre HISTFILE (fichier qui stocke l'historique de vos commandes bash), est tronqué pour contenir au maximum HISTFILESIZE=10 lignes.
- vous écrivez 50 lignes.
- à la fin de vos 50 commandes, seules les commandes 46 à 50 sont dans votre liste historique, dont la taille est déterminée par HISTSIZE=5.
- vous terminez votre séance.
- en supposant que
histappend
n'est pas activé, les commandes 46 à 50 sont sauvegardées sur votre HISTFILE qui a maintenant les 10 commandes qu'il tenait au début plus les 5 commandes nouvellement écrites. - votre HISTFILE est tronqué pour contenir HISTFILESIZE=10 lignes.
- en supposant que
- vous avez maintenant 10 commandes dans votre historique - 5 d'une session précédente et les 5 dernières que vous venez de taper dans la session que vous venez de terminer.
- lorsque vous commencez une nouvelle session, vous recommencez à 1 avec un HISTFILE de HISTFILESIZE=10.
HISTFILESIZE=5
et HISTSIZE=10
- vous commencez votre session.
- votre HISTFILE (fichier qui stocke l'historique de vos commandes bash), est tronqué pour contenir au plus HISTFILESIZE=5 lignes.
- vous écrivez 50 lignes.
- à la fin de vos 50 commandes, seules les commandes 41 à 50 sont dans votre liste d'histoire, dont la taille est déterminée par HISTSIZE=10.
- vous terminez votre séance.
- en supposant que
histappend
n'est pas activé, les commandes 41 à 50 sont sauvegardées dans votre fichier HISTFILE qui a maintenant les 5 commandes qu'il détenait au début plus les 10 commandes nouvellement écrites. - votre HISTFILE est tronqué pour contenir HISTFILESIZE=5 lignes.
- en supposant que
- Vous avez maintenant 5 commandes dans votre histoire - les 5 dernières que vous venez de taper dans l' session que vous venez de terminer.
- lorsque vous commencez une nouvelle session, vous recommencez à l'étape 1 avec un HISTFILE de HISTFILESIZE=5.
les Infos de elixir_sinari :
L'histoire "fichier" n'est pas mis à jour à mesure que vous tapez les commandes. Le les commandes sont stockés dans une "liste" séparément (accessible par l'histoire commande.) Le nombre de ces commandes stockées est contrôlé par Valeur HISTSIZE. Quand le shell (interactif) sort, le dernier Les lignes $ HISTSIZE sont copiées / annexées à $HISTFILE à partir de cette "liste". Si HISTFILESIZE est défini, puis après cette opération, il est garanti que seules les lignes $HISTFILESIZE (les plus récentes) existent dans $ HISTFILE . Et lorsque le shell démarre, la "liste" est initialisée à partir de $HISTFILE jusqu'à un maximum de commandes $HISTSIZE.
et de la man bash
page:
la valeur de la variable HISTSIZE est utilisé comme le nombre de commandes à sauvegarder dans une liste d'historique. Le texte des dernières commandes HISTSIZE (par défaut 500) est enregistré. (...)
au démarrage, l'historique est initialisé à partir du fichier nommé par la variable HISTFILE (par défaut ~/.bash_history). Le fichier nommé par la valeur de HISTFILE est tronqué, si nécessaire, pour ne pas contenir plus que le nombre de lignes spécifié par la valeur de HISTFILESIZE. (...) Lorsqu'un shell interactif sort, les dernières lignes $ HISTSIZE sont copiés à partir de l'histoire liste de $HISTFILE. Si l'option de shell histappend est activée (voir la description de shopt sous les commandes de construction de SHELL ci-dessous), les lignes sont annexées au dossier historique, sinon le dossier historique est écrasé. Si HISTFILE n'est pas activé, ou si le fichier d'historique n'est pas n'est pas enregistré. (...) Après l'enregistrement de l'histoire, la fichier d'historique est tronquer ne pas contenir plus de lignes D'HISTFILESIZE. Si HISTFILESIZE n'est pas défini, aucune troncature n'est effectuée.
en S'appuyant sur ce que arturomp a dit et dans un effort pour le rendre un peu plus clair.
supposez que vous avez 2000-quelque chose de longue histoire..
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2027 78
2028 57
2029 yu45u
vous pouvez réduire ce que vous voyez avec HISTSIZE
~$ HISTSIZE=5
~$ history
2026 546
2027 78
2028 56
2029 yu45u
2030 HISTSIZE=5
maintenant, peu importe le nombre de commandes que vous tapez, seules les 5 dernières seront enregistrées.
~$ ABC
~$ GGH
~$ GSDHFG
~$ JFDR
~$ ABSDDS
~$ AHFGHFD
<close terminal>
<open new terminal>
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2028 56
2029 yu45u
2030 HISTSIZE=5
2031 GGH
2032 GSDHFG
2033 JFDR
2034 ABSDDS
2035 AHFGHFD
Nous pouvons clairement voir que notre première commande ("ABC") n'est pas dans l'histoire puisque seuls les 5 dernières commandes ont été enregistrées.
maintenant, l'historique total est stocké dans un fichier ( .bash_history
) et vous pouvez modifier combien de temps ce fichier obtient avec le HISTFILESIZE
. Par exemple avec un 2033
HISTFILESIZE
, dans mon cas j'aurais ceci:
~$ history
1 fghfghdf
2 gegege
3 gege
.. ..
2028 HISTSIZE=5
2029 GGH
2030 GSDHFG
2031 JFDR
2032 ABSDDS
2033 AHFGHFD