Wie kann ich unter Linux auf eine gelöschte geöffnete Datei zugreifen (Ausgabe einer laufenden crontab-Task)?

7

Ich habe einen stündlichen Crontab-Job, der alle 10 Minuten mit einer mtr( traceroute) Ausgabe ausgeführt wird (dies wird mehr als eine Stunde dauern, bevor er per E-Mail an mich zurückgeschickt wird), und ich möchte den aktuellen Fortschritt sehen.

Unter Linux habe ich verwendet lsof -n | fgrep cron( lsofähnelt BSDs fstat), und es scheint, als hätte ich die Datei gefunden, aber sie wird als gelöscht kommentiert (eine Standardpraxis für temporäre Dateien ist direkt nach dem Öffnen zu löschen):

COMMAND     PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
...
cron      21742       root    5u      REG      202,0      7255      66310 /tmp/tmpfSuELzy (deleted)

Und kann nicht mehr mit seinem vorherigen Namen aufgerufen werden:

# stat /tmp/tmpfSuELzy
stat: cannot stat `/tmp/tmpfSuELzy': No such file or directory

Wie greife ich auf eine solche gelöschte Datei zu, die noch geöffnet ist?

cnst
quelle

Antworten:

12

Auf die Datei kann über das /procDateisystem zugegriffen werden: Sie kennen die PID und die FD bereits aus der lsofAusgabe.

cat /proc/21742/fd/5
cnst
quelle
Dies sind symbolische Links zur Datei ... funktioniert es immer noch, wenn die Datei gelöscht wird?
Bonsi Scott
4
@ BonsiScott: Alle Dateien in /procsind gefälscht. Für /proc/*/fd/Dateien, beim Aufruf statauf sie, sagen sie dir , es ist ein symbolischer Link, wenn Sie anrufen readlinkauf sie, sie zurückkommen, was sie wollen (in diesem Fall ein absoluter Pfad zur Datei , die geöffnet wurde), und , wenn Sie anrufen openund readauf sie erhalten Sie Zugriff auf eine etwas reale Datei mit Inhalten. Gleiches gilt für viele Dateien in /proc. Beispielsweise haben die meisten dynamisch generierten Dateien eine Dateigröße von Null, haben jedoch Inhalt.
BatchyX
1
Mit vielen Tools können Sie auch Symlinks absichtlich dereferenzieren. So habe ich beispielsweise ls -l --dereference-command-line /proc/1234/fd/5die Größe einer geöffneten, aber gelöschten Datei überprüft.
Zanchey