Il y a quelques jours, mon historique zsh a apparemment été vidé, peut‑être à cause d’une fausse manip dont je parlerai peut‑être. Je crois avoir rempli mon $HOME
complètement, et ça n’a peut‑être pas plu à zsh.
Mes shells n’enregistraient donc plus les nouvelles commandes dans le fichier .zsh_history
, et surtout, ce fichier est devenu vide. Or, je tiens à mon historique ! Il y a un tas de commandes que je rappelle simplement en tapant leurs premières lettres. J’envoie des textos à certains destinataires fréquents depuis le terminal en faisant Ctrl
+ R
Prénom (le prénom étant dans la commande, parce que je le rajoute à la fin dans un commentaire, hé hé).
Perdre cet historique non sauvegardé est donc un drame. Ça m’est déjà arrivé, c’est quand même pénible. Je ne peux plus rien faire. Je n’ai plus qu’à quitter l’informatique et aller monter un refuge en montagne (ce qui est bien aussi, remarquez !). Alors, comment faire ?
Une instance de zsh qui tourne depuis plusieurs jours a encore un historique fonctionnel. Simplement, l’historique n’est plus écrit sur le disque. J’ai repoussé le moment de traiter le problème, mais à un moment l’ordi risque de planter, ou le terminal, et j’ai besoin de redémarrer pour appliquer les mises à jour… la libc a été mise à jour depuis le dernier démarrage quand même. Alors, comment faire ?
fc -W /tmp/zshhistory
Voilà ! Cette commande écrit l’historique dans le fichier indiqué et il suffit maintenant de le copier vers $HISTFILE
, c’est‑à‑dire ~/.zsh_history
chez moi.
Je m’en vais ajouter une tâche Cron journalière pour copier ce fichier d’historique dans mon dossier synchronisé, par exemple dans `{HOST}`… Ça permettra aussi d’avoir accès à mon historique quand j’utilise un autre ordinateur.
Si vous n’avez pas la chance d’avoir une commande comme fc
sur votre shell, vous pouvez toujours bidouiller avec la commande history
, qui vous donne la liste des commandes, et reconstruire un fichier ~/.${SHELL}_history
manuellement :
history > /tmp/hist
Joyeux Noël si vous le fêtez. Sinon, joyeuse journée quand même. :-)
# Il manque un s
Posté par raphj . Évalué à 2.
D’ailleurs, heureusement que je n’ai pas de pote dont le diminutif est
rm
. Ah ah.Bon la vraie raison de ce commentaire est le signalement de ce manquement à notre belle grammaire dans le journal :
[^] # Re: Il manque un s
Posté par Benoît Sibaud (site web personnel) . Évalué à 7. Dernière modification le 25 décembre 2019 à 10:18.
Corrigé, merci. (Attention avec ton pote dd et ta copine cat quand même, ainsi qu'aux vieux de ed et joe, voire à l'autre type, ou au wc communicant pour fan d'IOT)
[^] # Re: Il manque un s
Posté par raphj . Évalué à 5. Dernière modification le 25 décembre 2019 à 10:26.
« Un jour, j’ai rincé ma machine en essayant d’envoyer un texto à Dédé. Non, c’est une longue histoire… »
Merci pour la correction :-)
[^] # Re: Il manque un s
Posté par barmic 🦦 . Évalué à 7.
Ça me fait penser que j'ai aucune nouvelles de mon pote shred…
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Il manque un s
Posté par Benoît Sibaud (site web personnel) . Évalué à 10.
J'ai discuté une fois avec mon pote Vim et j'ai jamais réussi à le quitter.
# La base de la base
Posté par Kerro . Évalué à 4.
Donc tu as forcément une sauvegarde à jour.
Mettre en place cette sauvegarde est plus rapide que de trouver la solution que tu as utilisé et d'écrire ce journal.
En plus ça t'es déjà arrivé :-)
[^] # Re: La base de la base
Posté par Psychofox (Mastodon) . Évalué à 1. Dernière modification le 25 décembre 2019 à 22:42.
Ouais j'ai aussi tiqué à cette ligne, si c'est important pour l'auteur, pourquoi ne le sauvegarde t-il pas?
Et puis pourquoi ne pas créer une alerte quand son $HOME est presque plein et pouvoir se prémunir d'autres souçis plutôt que de s'inventer une solution alambiquée pour sauver son historique?
[^] # Re: La base de la base
Posté par raphj . Évalué à 8. Dernière modification le 26 décembre 2019 à 09:17.
Personne n'est parfait et on ne prévoit pas tout !
En particulier, mes fichiers importants sont sauvegardés en temps réel avec Nextcloud, instance elle-même sauvegardée chaque nuit dans un sous-volume Btrfs à part sur une autre machine. Ce qui fait que mes données sont à deux endroits physiques à chaque instant, puis à un troisième endroit physique la nuit suivante. J'ai une version journalière de chacun de ces fichiers sur trois ans (sauf les jours où ça s'est planté…). Mais synchroniser l'historique zsh en temps réel comme ça ce n'est pas fou et j'ai dû retirer l'historique zsh de la synchronisation. J'ai reporté la gestion de cette sauvegarde « à plus tard ».
Et bien sûr, pour des raisons de narration, j'en ai rajouté des tonnes. Je survivrais à la perte de mon historique zsh. L'avoir est tout de même un gros confort, d'où une recherche de solution malgré tout. Et vous voyez, je n'ai finalement rien perdu.
Vous avez l'air d'écrire vos commentaires comme si tout le monde était capable de tout prévoir parfaitement. Je n'aime pas trop qu'on vienne me faire la leçon, ce n'est pas le but de ce journal.
[^] # Re: La base de la base
Posté par raphj . Évalué à 1. Dernière modification le 26 décembre 2019 à 09:22.
(d'autant que j'aborde la question dans le journal : « Je m’en vais ajouter une tâche Cron journalière pour copier ce fichier d'historique dans mon dossier synchronisé, par exemple dans
$DOSSIER/zsh_history-${HOST}
»)[^] # Re: La base de la base
Posté par raphj . Évalué à 4. Dernière modification le 26 décembre 2019 à 09:38.
Ça KDE s'en charge tout seul, mais la fausse manip impliquait une copie vers
$HOME
qui remplissait la partoche à toute vitesse. Donc ça a juste aidé un diagnostique plus rapide mais pas à prévenir le remplissage total de la partition.Et puis perso, ce genre d'alerte, c'est la dernière chose que je pense à mettre en place sur autre chose qu'un serveur en production. Heureusement que l'environnement de bureau s'en charge :-)
[^] # Re: La base de la base
Posté par Adrien Dorsaz (site web personnel, Mastodon) . Évalué à 3.
Je me demande s'il parle de l'historique qui est en RAM et n'est pas encore enregistré sur le disque ?
Si je me souviens bien, l'historique de la session en cours s'enregistre par défaut à la fin de la session. D'ailleurs c'est un peu ennuyeux comme comportement quand on a plusieurs terminaux ouverts en même temps: l'historique n'est pas partagé directement entre eux.
[^] # Re: La base de la base
Posté par barmic 🦦 . Évalué à 4. Dernière modification le 29 décembre 2019 à 12:35.
zsh a une option pour ça :
incappendhistory
. Conjugué avecappendhistory
etsharehistory
, tu obtiens quelque chose qui tient la route en termes de gestion d’historique.https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: La base de la base
Posté par raphj . Évalué à 3.
Exactement : historique partagé.
Chaque session de shell a son historique, mais inscrit les commandes dans un historique commun. Flèche du haut rappelle la ligne précédente dans la session actuelle, mais un appui sur la touche entrée avant flèche du haut charge l'historique produit par les autres sessions parallèles. Très pratique.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.