Lsof – listowanie otwartych plików w linuxie

Cześć! Cieszę się, że mnie odwiedziłeś/aś. Zanim przejdziesz do artykułu chciałbym zwrocić Ci uwagę na to, że ten artykuł był pisany kilka lat temu (2018-11-15) miej więc proszę na uwadzę że rozwiązania i przemyślenia które tu znajdziesz nie muszą być aktualne. Niemniej jednak zachęcam do przeczytania.

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
Mateusz M.

Ostatnie wpisy

Python 1.0 vs. 3.13: Co się zmieniło?

Cześć. Dziś luźny artykuł, bo dziś pobawimy się jedną z pierwszy wersji Pythona. Skompilujemy go i zobaczymy co tam w… Read More

1 tydzień ago

Podsumowanie: styczeń i luty 2025

Nowy rok czas zacząć! Więc lećmy z podsumowaniem. Nowy artykuł Nie uwierzycie, ale pojawił się na blogu nowy artykuł! Piszę… Read More

3 tygodnie ago

Just-in-time compiler (JIT) w Pythonie

Cześć! W Pythonie 3.13 dodano JITa! JIT, czyli just-in-time compiler to optymalizacja na która Python naprawdę długo czekał. Na nasze… Read More

1 miesiąc ago

Podsumowanie roku 2024

Cześć! Zapraszam na podsumowanie roku 2024. Książki W sumie rok 2024 był pod względem ilości książek nieco podobny do roku… Read More

1 miesiąc ago

Podsumowanie: wrzesień, październik, listopad i grudzień 2024

Podtrzymując tradycję, prawie regularnych podsumowań, zapraszam na wpis! Nie mogło obyć się bez Karkonoszy We wrześniu odwiedziłem z kolegą Karkonosze,… Read More

2 miesiące ago

Podsumowanie: maj, czerwiec, lipiec i sierpień 2024

Oj daaawnoo mnie tu nie było. Ale wakacje to był czas dużej liczby intensywnych wyjazdów i tak naprawdę, dopiero jakoś… Read More

6 miesięcy ago