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?


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 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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.