Journal Restaurer l’historique de zsh

Posté par  . Licence CC By‑SA.
Étiquettes :
13
25
déc.
2019

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 `DOSSIER/zsh_history-{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  . Évalué à 2.

    J’envoie des textos à certains destinataires fréquents depuis le terminal en faisant Ctrl+R Prénom

    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 :

    leurs première lettres

    • [^] # Re: Il manque un s

      Posté par  (site Web personnel) . Évalué à 7. Dernière modification le 25/12/19 à 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  . Évalué à 5. Dernière modification le 25/12/19 à 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  . Évalué à 7.

        Ça me fait penser que j'ai aucune nouvelles de mon pote shred…

  • # La base de la base

    Posté par  . Évalué à 4.

    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.

    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  . Évalué à 1. Dernière modification le 25/12/19 à 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  . Évalué à 8. Dernière modification le 26/12/19 à 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  . Évalué à 1. Dernière modification le 26/12/19 à 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  . Évalué à 4. Dernière modification le 26/12/19 à 09:38.

        Et puis pourquoi ne pas créer une alerte quand son $HOME est presque plein

        Ç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  (site Web personnel) . É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  . Évalué à 4. Dernière modification le 29/12/19 à 12:35.

        zsh a une option pour ça : incappendhistory. Conjugué avec appendhistory et sharehistory, tu obtiens quelque chose qui tient la route en termes de gestion d’historique.

        • [^] # Re: La base de la base

          Posté par  . É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 à ceux qui les ont postés. Nous n’en sommes pas responsables.