Stellen Sie ein ausgeführtes Skript von einer Terminalsitzung wieder her

35

Also verwende ich GNU Screen , um mehrere laufende Skripte / Programme zu verwalten. Das Multiplexing und die Abnehmbarkeit sind sehr hilfreich.

Ich habe ein Skript von der Festplatte entfernt und jetzt habe ich Probleme, das Backup zu finden. In einer der Terminalsitzungen wurde das Skript jedoch ausgeführt, bevor die Datei gelöscht wurde, und es funktioniert weiterhin einwandfrei.

Gibt es eine Möglichkeit, die Terminalsitzung zu hijacken, in der das Skript ausgeführt wird, um den Inhalt dieser Datei wiederherzustellen?

Fdo
quelle

Antworten:

61

Suchen Sie nach der PID des Skripts mit ps

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

überprüfen /proc/$PID/fd/; Es sollte eine fehlerhafte Verknüpfung zur Skriptdatei geben, diese cat sollte jedoch funktionieren (während das Skript ausgeführt wird!):

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

Viel Glück!

mrc
quelle
@mrc Ich denke, dass die Arbeit, weil der Inhalt von Dateien, in den Speicher geladen wird
c4f4t0r
Toller Vorschlag! Es ist auch eine Warnung, dass @fdo eine anständige Backup-Routine einrichten muss, da er beim nächsten Mal möglicherweise nicht so viel Glück hat.
Criggie
12
@ c4f4t0r Es hat nichts damit zu tun, ob es in den Speicher geladen wird oder nicht. Linux entfernt eine Datei (Inode) nicht explizit, solange Handles geöffnet sind - die Datei verbleibt auf der Festplatte und belegt Speicherplatz. rmund andere Werkzeuge entkoppeln die Datei, die Verbindung aus der Datei entfernen Namen auf die aktuellen Daten (bezogen von Inode), aber solange eine Referenz vorhanden ist (Festverbindung oder offenen Griff) der Inode nicht gelöscht.
Bob
Nur neugierig ... woher wusstest du, dass du fd 255 überprüfst? Oder ist das nur ein Beispiel?
Gardenhead
2
@gardenhead Es ist ein Beispiel.
user253751