Odzyskaj działający skrypt z sesji terminala

35

Więc używam GNU Screen do zarządzania wieloma uruchomionymi skryptami / programami. Multipleksowanie i odłączalność jest bardzo pomocne.

Usunąłem skrypt z dysku i teraz mam problem ze znalezieniem kopii zapasowej. Jednak jedna z sesji terminalu wykonywała skrypt przed usunięciem pliku i nadal działa dobrze.

Czy istnieje sposób na przejęcie sesji terminala, na której jest aktualnie uruchomiony skrypt, w celu odzyskania zawartości tego pliku?

Fdo
źródło

Odpowiedzi:

61

poszukaj pid skryptu za pomocą ps

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

sprawdź /proc/$PID/fd/; powinien być uszkodzony link do pliku skryptu, ale cat powinien działać (podczas działania skryptu!):

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

powodzenia!

mrc
źródło
@mrc Myślę, że to działa, ponieważ zawartość plików jest ładowana do pamięci
c4f4t0r
Świetna sugestia! Jest to również ostrzeżenie, że @fdo musi skonfigurować porządną procedurę tworzenia kopii zapasowych, ponieważ następnym razem może nie mieć tyle szczęścia.
Criggie,
12
@ c4f4t0r Nie ma nic wspólnego z ładowaniem go do pamięci czy nie. Linux jawnie nie usunie pliku (i-węzła), gdy są otwarte uchwyty - plik pozostaje na dysku, zajmując miejsce. rmi inne narzędzia rozłączają plik, usuwając łącze z nazwy pliku do rzeczywistych danych (do których odwołuje się i-węzeł), ale dopóki istnieje odwołanie (twardy link lub otwarty uchwyt), i-węzeł nie jest usuwany.
Bob
Ciekawe ... skąd wiedziałeś, żeby sprawdzić FD 255? Czy to tylko przykład?
ogrodnik
2
@gardenhead To przykład.
user253751,