Wie kann ich eine sh-Datei lesen, während sie funktioniert, aber gelöscht wird?

20

In einem Interview haben sie mir diese Frage gestellt.

Es wurde bereits eine SH-Datei ausgeführt, die jedoch seit dem Start der Ausführung gelöscht wurde.

Sie wollen, dass ich den Prozess finde und die Datei lese.

Ich habe es geschafft, den Prozess mit zu finden

ps -ef | grep test.sh

und versuchte es mit zu lesen

cat /proc/PID/cmdline test.sh

aber es heißt

no such file or directory

Ich wusste nicht, was ich als nächstes tun sollte, also musste ich das überspringen.

Vielleicht war es eine einfache Frage, aber das war wirklich eine gute Frage für mich und ich möchte wirklich die Antwort wissen. Könnt ihr helfen?

Gazagelen
quelle

Antworten:

24
tail -c +0 -f /proc/{pid}/fd/{fd} > /tmp/file

Dabei ist {pid} die ID Ihres Prozesses und /tmp/filehat den Inhalt. Verwenden Sie einen anderen Ort und Namen, wenn Sie ihn beibehalten möchten.

  • {pid} ist die ID des Prozesses.
  • {fd} ist der Dateideskriptor. lsofsollte das fd zeigen. lsofwird wahrscheinlich auch "gelöscht" in der Zeile anzeigen, so grepdass Sie das auch können. lsof -nP +L1listet alle Dateien mit weniger als 1 Link auf, eine gelöschte Datei hat 0. Fügen Sie ein hinzu | grep {pid}, um nur nach Ihrer PID zu suchen.
  • vom dessert: lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'einfach den fd holen.
  • von Kommentaren: Sie verwenden können less, catoder cpauch. Ich bin aufgewachsen am tail:)
Rinzwind
quelle
"Ich bin mit Schwanz aufgewachsen!" Ein wertvoller Einblick für alle, die mit * x etwas zu tun haben.
Sri