Frage Stellen Sie ein laufendes Skript aus einer Terminalsitzung wieder her


Also ich benutze GNU-Bildschirm um mehrere laufende Skripte / Programme zu verwalten. Die Multiplex- und Lösbarkeit ist ziemlich hilfreich.

Ich habe ein Skript von der Festplatte entfernt und habe nun Probleme, die Sicherung zu finden. Eine der Terminalsitzungen führte jedoch das Skript aus, bevor die Datei gelöscht wurde, und es funktioniert weiterhin einwandfrei.

Gibt es eine Möglichkeit, die Terminalsitzung zu entführen, die gerade das Skript ausführt, um den Inhalt dieser Datei wiederherzustellen?


34
2017-07-20 09:13


Ursprung


Ebenfalls: Wie kann ich eine gelöschte Datei wiederherstellen, wenn sie noch von einem Prozess geöffnet wird? - SU, Erneutes Verknüpfen einer gelöschten Datei - muru


Antworten:


Suche nach dem Pid des Skripts ps

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

prüfen /proc/$PID/fd/; Es sollte eine defekte Verbindung zur Skriptdatei bestehen, aber cat  sollte funktionieren (während das Skript läuft!):

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

Viel Glück!


60
2017-07-20 10:37



@mrc Ich denke das funktioniert, weil der Inhalt von Dateien im Speicher geladen wird - c4f4t0r
Großer Vorschlag! Es ist auch eine Warnung, dass @fdo eine ordentliche Backup-Routine einrichten muss, denn beim nächsten Mal ist er vielleicht nicht so glücklich. - Criggie
@ c4f4t0r Nichts damit zu tun, dass es in den Speicher geladen wird oder nicht. Linux wird explizit keine Datei (Inode) entfernen, solange offene Handles vorhanden sind - die Datei bleibt auf dem Datenträger und beansprucht Speicherplatz. rm und andere Werkzeuge Verknüpfung aufheben die Datei, entfernen Sie den Link aus der Datei Name zu den tatsächlichen Daten (referenziert von inode), aber solange eine Referenz existiert (hard link oder open handle) wird der inode nicht gelöscht. - Bob
Nur neugierig ... woher wussten Sie, dass Sie fd 255 überprüfen? Oder ist das nur ein Beispiel? - gardenhead
@gardenhead Es ist ein Beispiel. - immibis