Восстановить работающий скрипт из терминальной сессии

35

Поэтому я использую GNU Screen для управления несколькими запущенными скриптами / программами. Мультиплексирование и отделяемость весьма полезны.

Я удалил скрипт с диска, и теперь у меня возникли проблемы с поиском резервной копии. Однако один из сеансов терминала выполнял сценарий до удаления файла, и он продолжает работать нормально.

Есть ли способ перехватить сеанс терминала, на котором в данный момент выполняется сценарий, для восстановления содержимого этого файла?

Fdo
источник

Ответы:

61

ищите pid скрипта, используя ps

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

проверить /proc/$PID/fd/; должна быть неработающая ссылка на файл скрипта, но она cat должна работать (пока скрипт работает!):

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

удачи!

MRC
источник
@ mrc Я думаю, что это работает, потому что содержимое файлов загружается в память
c4f4t0r
Отличное предложение! Это также предупреждение о том, что @fdo нужно настроить приличную процедуру резервного копирования, потому что в следующий раз ему может не повезти.
Кригги
12
@ c4f4t0r Ничего общего с тем, загружается он в память или нет. Linux явно не удалит файл (inode), пока есть открытые дескрипторы - файл остается на диске, занимая место. rmи другие инструменты разъединить файл, удаляя ссылки из файла имени к фактическим данным ( на который ссылается инодом), но до тех пор , как существует ссылка (жесткая ссылку или открытого дескриптор) инод не удаляются.
Боб
Просто любопытно ... как вы узнали, чтобы проверить FD 255? Или это только пример?
садовод
2
@gardenhead Это пример.
user253751