Recuperar un script en ejecución desde una sesión de terminal

35

Así que estoy usando GNU Screen para administrar múltiples scripts / programas en ejecución. La multiplexación y la capacidad de separación es bastante útil.

Eliminé un script del disco y ahora tengo problemas para encontrar la copia de seguridad. Sin embargo, una de las sesiones de terminal estaba ejecutando el script antes de que el archivo fuera eliminado y continúa funcionando bien.

¿Hay alguna manera de secuestrar la sesión de terminal que actualmente ejecuta el script para recuperar el contenido de este archivo?

Fdo
fuente

Respuestas:

61

busca el pid del script usando ps

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

comprobar /proc/$PID/fd/; debería haber un enlace roto al archivo de script, pero cat debería funcionar (¡mientras se ejecuta el script!):

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

¡buena suerte!

mrc
fuente
@mrc Creo que ese trabajo, porque el contenido de los archivos, se carga en la memoria
c4f4t0r
Gran sugerencia! También es una advertencia de que @fdo necesita configurar una rutina de respaldo decente, porque la próxima vez no tendrá tanta suerte.
Criggie
12
@ c4f4t0r Nada que ver con que se cargue en la memoria o no. Linux explícitamente no eliminará un archivo (inodo) mientras haya identificadores abiertos: el archivo permanece en el disco, ocupando espacio. rmy otras herramientas desvinculan el archivo, eliminando el enlace del nombre del archivo a los datos reales (referenciados por inode), pero mientras exista una referencia (enlace duro o asa abierta) el inode no se elimina.
Bob
Por curiosidad ... ¿cómo supiste comprobar fd 255? ¿O es solo un ejemplo?
cabeza de jardín
2
@gardenhead Es un ejemplo.
user253751