Récupérer un script en cours depuis une session de terminal


35

J'utilise donc GNU Screen pour gérer plusieurs scripts / programmes en cours d'exécution. Le multiplexage et la décoloration sont très utiles.

J'ai supprimé un script du disque et j'ai maintenant du mal à trouver la sauvegarde. Cependant, l'une des sessions de terminal exécutait le script avant la suppression du fichier et continue de fonctionner correctement.

Existe-t-il un moyen de pirater la session de terminal qui exécute actuellement le script pour récupérer le contenu de ce fichier?


Réponses:


61

recherchez le pid du script en utilisant ps

ps -ef|grep script.sh
Fdo  8983  8463  0 12:28 pts/2    00:00:00 /bin/bash ./script.sh

chèque /proc/$PID/fd/; il devrait y avoir un lien brisé vers le fichier de script, mais cat devrait fonctionner (tant que le script est en cours d'exécution!):

cat /proc/8983/fd/255 
#!/bin/bash
# script contents!

bonne chance!


@ MRC, je pense que le travail, parce que le contenu des fichiers, est chargé en mémoire
c4f4t0r

Bonne suggestion! C'est aussi un avertissement que @fdo doit mettre en place une routine de sauvegarde décente, car la prochaine fois, il ne sera peut-être pas aussi chanceux.
Criggie

12
@ c4f4t0r Rien à voir avec le chargement en mémoire ou non. Linux ne va pas explicitement supprimer un fichier (inode) tant qu'il y a des handles ouverts - le fichier reste sur le disque, occupant de l'espace. rmet d'autres outils dissocient le fichier, en supprimant le lien du nom de fichier vers les données réelles (référencées par inode), mais tant qu'il existe une référence (lien physique ou handle ouvert), l'inode n'est pas supprimé.
Bob

Juste curieux ... comment avez-vous su pour vérifier fd 255? Ou est-ce juste un exemple?
Gardenhead

2
@gardenhead C'est un exemple.
user253751
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.