Jak znaleźć przesunięcie pliku otwartego pliku?

26

Mój problem polega na tym, lsof -p pid że mogę znaleźć listę otwartego pliku procesu, którego identyfikator procesu to pid. Ale czy istnieje sposób, aby ustalić przesunięcie pliku dla każdego dostępnego pliku?

Proszę o sugestie?

Ta Thanh Dinh
źródło

Odpowiedzi:

38

W systemie Linux można znaleźć pozycję numer deskryptora pliku Nprocesu PIDw /proc/$PID/fdinfo/$N. Przykład:

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

Ten sam plik można otworzyć kilka razy w różnych pozycjach za pomocą kilku deskryptorów plików, więc musisz wybrać odpowiedni plik, jeśli jest ich więcej niż jeden. Posługiwać się:

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

wiedzieć, jaki jest plik, do którego dołączony jest odpowiedni deskryptor pliku (może to nie być plik, w tym przypadku dowiązanie symboliczne zwisa).

Stéphane Gimenez
źródło
1
Twoja odpowiedź jest świetna.
Ta Thanh Dinh
12

lsofmożna to zrobić z -oopcją.

W Linuksie pobiera informacje /proc, więc możesz je również tam znaleźć .

Gilles „SO- przestań być zły”
źródło
Minęło sporo czasu od mojego ostatniego pytania i nie byłem tu od dawna. Dziękuję za Twoją odpowiedź.
Ta Thanh Dinh
Mogę również potwierdzić, że to działa. Przesunięcie jest jednak podane jako HEX.
Benjamin