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?

Fdo
la source

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
la source
@ 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