Відновлення запущеного сценарію з термінального сеансу


35

Тому я використовую екран GNU для управління кількома запущеними сценаріями / програмами. Мультиплексування та від'ємність дуже корисні.

Я вилучив сценарій з диска, і тепер у мене виникають проблеми з пошуку резервної копії. Однак один із термінальних сеансів виконував сценарій перед тим, як файл був видалений, і він продовжує працювати чудово.

Чи є спосіб викрасти сеанс терміналу, на якому зараз виконується сценарій, щоб відновити вміст цього файлу?


Відповіді:


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 Я думаю, що це працює, оскільки вміст файлів завантажується в пам'ять
c4f4t0r

Чудова пропозиція! Це також попередження про те, що @fdo потребує встановлення гідного режиму резервного копіювання, тому що наступного разу він може не так пощастить.
Criggie

12
@ c4f4t0r Нічого спільного з тим, завантажується він у пам'ять чи ні. Linux явно не видалить файл (inode), поки є відкриті ручки - файл залишається на диску, займаючи місце. rmта інші інструменти роз'єднати файл, видаляючи посилання з файлу імені до фактичних даних ( на який посилається инодом), але до тих пір , як існує посилання (жорстка посилання або відкритого дескриптор) инод будуть збережені.
Боб

Просто цікаво ... як ти знав, щоб перевірити fd 255? Або це лише приклад?
садок

2
@gardenhead Це приклад.
користувач253751
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.