Wie finde ich den Dateiversatz einer geöffneten Datei heraus?

26

Mein Problem ist, dass lsof -p pid ich mit die Liste der geöffneten Datei eines Prozesses herausfinden kann, dessen Prozess-ID pid ist. Aber gibt es eine Möglichkeit, den Dateiversatz jeder Datei, auf die zugegriffen wird, herauszufinden?

Bitte geben Sie mir einige Vorschläge?

Ta Thanh Dinh
quelle

Antworten:

37

Unter Linux finden Sie die Position der Dateideskriptornummer Ndes Prozesses PIDin /proc/$PID/fdinfo/$N. Beispiel:

$ cat /proc/687705/fdinfo/36
pos:    26088
flags:  0100001

Dieselbe Datei kann mithilfe mehrerer Dateideskriptoren mehrmals mit unterschiedlichen Positionen geöffnet werden. Wählen Sie daher die entsprechende Datei aus, falls mehrere vorhanden sind. Verwenden:

$ readlink /proc/$PID/fd/$N

um zu wissen, an welche Datei der entsprechende Dateideskriptor angehängt ist (es handelt sich möglicherweise nicht um eine Datei, in diesem Fall baumelt der Symlink).

Stéphane Gimenez
quelle
1
Ihre Antwort ist großartig.
Ta Thanh Dinh
12

lsofkann dies mit der -oOption tun .

Unter Linux bezieht es seine Informationen von /proc, sodass Sie sie auch dort abrufen können.

Gilles 'SO - hör auf böse zu sein'
quelle
Es ist lange her seit meiner letzten Frage und ich bin schon lange nicht mehr hier. Danke für die Antwort.
Ta Thanh Dinh
Ich kann bestätigen, dass dies auch funktioniert. Der Offset wird jedoch als HEX angegeben.
Benjamin