9 votes

Pourquoi le fichier .bash_history est-il périodiquement effacé ?

C'est la deuxième fois que ça arrive. Je viens d'essayer de rechercher par grep des commandes historiques et je n'ai rien trouvé. Un coup d'oeil à mon historique bash montre qu'il est pratiquement vide. Comme s'il avait été nettoyé à fond. J'utilise iTerm2 et MacOS 10.13.6. Je vois qu'il y a un répertoire .bash_sessions avec quelques sessions sauvegardées mais je suppose que c'est probablement un truc d'iTerm2 pour préserver les sessions pour une raison ou une autre.

11voto

Jose Chavez Points 645

Il peut y avoir de multiples raisons pour lesquelles cela se produit - je vais essayer de vous expliquer comment cela fonctionne ci-dessous.

Cependant, je peux dire que l'autre réponse que vous avez reçue ici n'est pas correcte. HISTFILESIZE et HISTSIZE ne feront pas en sorte que votre historique soit "parfois" entièrement ou presque effacé. C'est seulement en les mettant à 0 que vous n'obtiendrez rien dans les fichiers - mais cela se produira à chaque fois, et pas par hasard. En outre, ce que vous décrivez avec le fichier qui est "presque effacé" ne peut pas se produire parce qu'il est réglé sur 0.

Vous êtes en fait sur la bonne voie en mentionnant .bash_sessions. Ce n'est pas un "truc" d'iTerm2, mais plutôt la façon dont cela fonctionne par défaut sur une installation standard de MacOS. Apple a intégré un historique par session en plus d'une installation bash normale.

Cela signifie que si vous avez plusieurs terminaux en cours d'exécution (par exemple plusieurs onglets), chacun d'entre eux aura un historique distinct enregistré dans .bash_sessions. Si vous redémarrez votre Mac et que les terminaux Windows sont restaurés, vous constaterez que chacun a son propre historique - et seulement son propre historique.

Lorsque vous fermez une session bash, le système d'Apple fusionne l'historique de cette session spécifique dans le fichier global .bash_history. Ensuite, lorsque vous ouvrez un nouveau terminal (et donc une nouvelle session bash), il démarre avec cet historique fusionné contenant l'historique de plusieurs sessions potentielles.

Tout ceci est géré par le /etc/bashrc_Apple_Terminal script.

Maintenant que vous savez comment cela fonctionne, voici quelques causes possibles de ce que vous voyez :

  • Vous avez peut-être accidentellement supprimé l'historique vous-même (history -c).

  • Votre Mac est peut-être infecté par un logiciel malveillant et/ou piraté, et quelqu'un d'autre supprime votre fichier .bash_history.

  • Vous avez installé un logiciel qui vide/supprime périodiquement le fichier .bash_history.

Ces raisons ne sont pas très probables, je dirais.

Il y a une dernière cause possible :

Il y a une condition de course connue dans la gestion des historiques de bash. Si vous fermez plusieurs sessions bash en même temps (par exemple en fermant une fenêtre de terminal avec plusieurs onglets), vous pouvez perdre une partie ou la totalité de l'historique.

Cela se produit si l'ordinateur est "lent" pendant la lecture/écriture de certaines parties de l'historique. En gros, cela fonctionne comme suit : l'historique actuel est lu, le fichier est supprimé ou déplacé, et un nouveau fichier est créé, dans lequel toutes les lignes de l'historique sont écrites. Si ce processus est exécuté plusieurs fois en même temps, vous pouvez voir qu'un processus supprime l'ancien historique, l'autre processus lit un historique vide, puis le premier processus réécrit tout l'historique, et enfin l'autre processus le supprime et écrit un historique très court contenant seulement quelques lignes récentes - car il n'a rien lu. Ce bogue se présente exactement comme ce que vous avez décrit.

La solution consiste simplement à fermer une session bash à la fois pour laisser au système le temps de tout écrire correctement.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X