Qu'est-ce qui pourrait effacer mon historique bash de manière inattendue?

16

Aujourd'hui, j'ai remarqué que mon historique de bash était complètement effacé. Je n'ai ni exécuté history -cni supprimé le .bash_historyfichier. Mis à part la suppression du .bash_historyfichier et history -c, comment effacer l' historique de bash?

nik.1
la source
2
Cela aurait pu arriver par exemple >.bash_history. Peut-être que quelqu'un était dans votre compte et a essayé de cacher ses traces. Vérifiez les heures de connexion inhabituelles avec last, effectuez une recherche /var/log/auth.log(en fonction de votre système).
ott--

Réponses:

17

Lors de la fermeture de plusieurs instances bash en même temps, une condition de concurrence connue peut entraîner la suppression de l'historique. Cela se produit car aucun verrouillage n'est utilisé lors de l'écriture du fichier d'historique bash.

Chet Ramey (le responsable de bash actuel) a donné un bon résumé des conditions de ce problème:

Le code actuel (bash-4.3-devel) fonctionne comme ceci, en supposant qu'aucune erreur (lib / readline / histfile.c: history_do_write ()):

  • renommer (histfile, histfile ~)
  • ouvrir le fichier avec O_CREAT | O_TRUNC
  • tampon malloc suffisamment grand pour contenir toutes les données d'historique
  • écrire toutes les entrées de l'historique en un seul appel en écriture (2)
  • Fermer le fichier
  • dissocier (histfile ~)

Le code bash-4.2 fonctionne de la même manière, sauf qu'il ne sauvegarde pas le fichier historique. Chaque shell fait la même chose à sa sortie, en supposant que histappend n'est pas défini, comme dans votre configuration.

Le fichier d'historique peut avoir une longueur nulle de deux manières: le malloc peut échouer ou l'écriture peut échouer. Dans bash-4.2, il est trop tard pour faire quoi que ce soit sur le fichier historique tronqué à ce stade. Dans bash-4.3, le fichier historique précédent sera restauré.

Ce fil de liste de diffusion de bug-bash contient une discussion décente sur les problèmes, les solutions possibles et les préoccupations entourant cela.

Il existe également d'autres possibilités:

  • À un moment donné, votre HISTSIZEou a HISTFILESIZEété défini sur 0
  • À un moment donné, votre ligne de lecture a history-sizeété définie sur 0
  • Quelqu'un, que ce soit intentionnellement ou non, a effacé l'historique de bash (via > "$HISTFILE"ou similaire)

Dans ce dernier cas, vous voudrez peut-être vérifier que quelqu'un n'a pas accédé à votre compte et essaie de masquer ses traces de manière grossière. Jetez un oeil à last, /var/log/auth(ou /var/log/securesur CentOS / RHEL), et si vous l' avez, tout processus comptable et / ou un logiciel d'audit vous pouvez avoir installé.

Chris Down
la source
1

Comment j'ai accidentellement supprimé mon historique de bash:

Je roulais mon propre script alternatif de lecture de terminal à partir des premiers principes: https://tiswww.cwru.edu/php/chet/readline/rluserman.html

puis le tester dans un terminal. Cette GNU Readline a une taille d'historique et des instructions de préservation d'historique intégrées, donc la taille d'hist peut être par défaut, et ainsi tout votre historique est effacé.

Récupération de l'historique si laissé en mémoire:

Si vous l'attrapez avant un redémarrage, ou si un terminal a été laissé ouvert avant l'effacement, vous pourrez peut-être retrouver votre historique en mémoire. Fonctionne history | cut -c 8- > histback_user1.txtsur tous les terminaux laissés ouverts et pour chaque utilisateur. Si cela produit un fichier avec votre historique étendu, vous pouvez le remplacer ~/.bash_historypar histback_user1.txt. Vérifiez également l'historique de tous les utilisateurs récemment connectés au système ainsi que l'historique de root. Il est facile d'effacer accidentellement l'historique de bash dans de nombreuses circonstances, donc si vous voulez être sûr de ne pas perdre d'historique, vous avez besoin d'un script de sauvegarde quotidien.

Eric Leschinski
la source
Je vous remercie . Je ne sais pas ce qui s'est passé, mais mon histoire a été réinitialisée hier et ce n'est que maintenant que je l'ai remarqué. Mais, heureusement, je n'ai pas ouvert une seule fenêtre de terminal, mais 10 (!). Tout va bien maintenant.
Marc.2377