Lsof – listowanie otwartych plików w linuxie

Cześć,
kontynuując temat zarządzania serwerami nie sposób nie wspomnieć o programie

lsof (czyli list open files)

Przydatne narzędzie podglądania listy otwartych plików oraz programów które ich używają. W sumie to tyle, zerknijmy na jakiś przykład może.

Polecenie to zazwyczaj zwraca sporo danych więc warto przerzucić output do less’a:

1
lsof | less

Stwórzmy sobie plik w katalogu domowym

1
touch test.t

i używając interaktywnej konsoli Python’a otwórzmy ten pliczek:

i zobaczmy jak widzi to lsof:

i od lewej idąc mamy nazwę procesu który trzyma uchwyt i jego ID. Potem nazwa użytkownika z którego chodzi proces. Kolumna z wartością „3r” to FD czyli file descriptor #3 a literka „r” oznacza że plik jest otwarty do odczytu (read). Tutaj może być kilka wartości np. mem, cwd, txt – oznacza to ogólnie w jaki sposób aplikacja otwierająca plik widzi go. Dalej mamy kolumnę TYPE i może ona przybrać takie wartości jak chociażby

1
2
3
4
REG – Regular File
DIR – Directory
FIFO – First In First Out
CHR – Character special file

No i dalej to już tylko numery urządzenia którego plik dotyczy no i rozmiar. Na sam koniec info jakiego pliku to dotyczy.

To urządzenie które jest enigmatycznie przedstawione jako „8,2” to nic innego jak dysk, lista jest dostępna w repo linuxa: klik a nasza 8mka to:

1
2
3
4
5
6
7
8
9
10
   8 block  SCSI disk devices (0-15)
0 = /dev/sda        First SCSI disk whole disk
16 = /dev/sdb       Second SCSI disk whole disk
32 = /dev/sdc       Third SCSI disk whole disk
...
240 = /dev/sdp      Sixteenth SCSI disk whole disk

Partitions are handled in the same way as for IDE
disks (see major number 3) except that the limit on
partitions is 15.

co znaczy że dwójka, po przecinku, oznacza partycję.

Lsof ma przydane przełączniki, np:

-p

pozwala zobaczyć pliki otwarte przez dany proces. Wziąłem proces którym otworzyłem wcześniej utworzony plik. Jak widać, trzyma on uchwyty nie tylko do mojego pliku.

podobnie zadziała przełącznik „-u” tylko będzie pokazywał rezultat dla usera:)

Co pozwala np. zabić wszystkie procesy konkretnego użytkownika:

1
kill -9 `lsof -t -u mmazurek`

Tak czy siak – fajne polecenie i dość istotne, bo jak wiadomo, wszystko w linuxie jest plikiem:)

Dzięki za wizytę,
Mateusz Mazurek
Podziel się na:
    Facebook email PDF Wykop Twitter

Dodaj komentarz

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
Powiadom o