Linux lsof Command

, Author

Narzędzie komendy „lsof” w Linuksie jest jednym z wielu wbudowanych narzędzi, które jest super przydatne do sprawdzania „listy otwartych plików”. Tak, termin „lsof” jest skrótem od zadania.

W systemie cały czas działa wiele procesów, które uzyskują dostęp do różnych plików systemu. Plikami tymi mogą być pliki dyskowe, skrypty, gniazda sieciowe, urządzenia, nazwane rury i inne. Używając „lsof”, możliwe jest wykonanie wielu rzeczy, takich jak debugowanie. Jest to również całkiem przydatne dla administratorów systemu, aby dowiedzieć się, do jakich plików mają dostęp poszczególne procesy. Jednym z najbardziej użytecznych scenariuszy, jakie znalazłem, jest sytuacja, gdy masz zamiar odmontować system plików, ale nadal jest on dostępny.

Bez dalszych ceregieli, zacznijmy od „lsof”! Zakładam, że twój obecny system UNIX/Linux ma już zainstalowany program „lsof”.

which lsof

To zgłasza pełną ścieżkę polecenia, w tym przypadku „lsof”.

„lsof” version
lsof -v

Zgłasza szczegółowe informacje o wersji polecenia „lsof”, w tym datę kompilacji binarnej, wersję kompilatora, flagi kompilatora i inne.

Podstawowe użycie „lsof”

Uruchamia „lsof” samodzielnie.

lsof

Zgłasza DUŻĄ listę wszystkich plików, do których system ma dostęp w momencie uruchomienia polecenia.

Choć wszystkie pola są zrozumiałe same przez się, większość osób myli się co do kolumn „FD” i „TYPE” i ich wartości. Sprawdźmy je.

FD: Skrót od „File Descriptor”. Pojawiają się następujące wartości.

  • cwd: Bieżący katalog roboczy
  • rtd: Katalog główny
  • txt: Tekst programu (dane, kod i inne)
  • mem: Plik mapowany w pamięci
  • err: Błąd informacji FD
  • mmap: Memory-mapped device
  • ltx: Tekst biblioteki współdzielonej (dane i kod)
  • m86: DOS Merge mapped file

Są też inne wartości, które zauważysz w kolumnie, jak „1u”, po którym następują wartości u, r, w, itd. Co one oznaczają?

  • r: Dostęp do odczytu
  • w: Dostęp do zapisu
  • u: Dostęp do odczytu i zapisu
  • – : Nieznany tryb i zawiera znak blokady
  • ’ ’: Tryb jest nieznany i nie ma znaku blokady

TYPE: Opisuje typ pliku i jego identyfikację. Wartości są następujące.

  • DIR: Directory
  • CHR: Character-special file
  • REG: Regular file
  • FIFO: First in, first out

Otwarte pliki specyficzne dla użytkownika

Linux jest genialną platformą wieloużytkownikową. Wielu użytkowników może mieć dostęp do systemu w tym samym czasie i wykonywać operacje, do których mają uprawnienia.

Aby sprawdzić pliki, do których dostęp ma określony użytkownik, uruchom następujące polecenie.

lsof -u <username>

Jednakże, aby sprawdzić użytkowników z wyższą rangą, „lsof” będzie potrzebował uprawnienia „superużytkownika”.

sudo lsof -u <username>

A co powiesz na sprawdzenie wszystkich poleceń i plików, do których ma dostęp dany użytkownik? Uruchom następujący.

lsof -i -u <username>

Znowu, dla użytkowników z wyższą rangą, „lsof” będzie potrzebował przywileju „superużytkownika”.

sudo lsof -i -u <username>

Port-specific running processes

Aby dowiedzieć się o wszystkich procesach, które aktualnie używają danego portu, wywołaj „lsof” z flagą „-i”, a następnie z informacją o protokole i porcie.

lsof -i<46><protokół><@nazwa_hostu|adres_hostu>
:<usługa|port>

Na przykład, aby sprawdzić wszystkie programy mające obecnie dostęp do portu 80 przez protokół TCP/IP, wykonaj następujące polecenie.

lsof -i TCP:80

Tej metody można również użyć do pokazania wszystkich procesów, które korzystają z portów w określonym zakresie, na przykład od 1 do 1000. Struktura polecenia jest podobna do poprzedniej, z odrobiną magii w części dotyczącej numeru portu.

lsof -i TCP:1-1000

Procesy specyficzne dla protokołów

Oto 2 przykłady pokazujące procesy, które aktualnie używają protokołów IPv4 i IPv6.

lsof -i 4

lsof -i 6

Listowanie połączeń sieciowych

Następujące polecenie wyświetli wszystkie połączenia sieciowe z bieżącego systemu.

lsof -i

Wykluczanie za pomocą ^

Tak, możemy wykluczyć konkretnego użytkownika, port, FD i inne za pomocą znaku „^”. Jedyne co musisz zrobić, to używać go z rozwagą, aby nie zepsuć całego wyjścia.

W tym przykładzie wykluczmy wszystkie procesy użytkownika „root”.

lsof -u^root

Istnieją inne sposoby użycia tego mechanizmu wykluczania z „lsof”, na przykład z flagami takimi jak „-c”, „-d” itp. Nie wszystkie flagi obsługują ten mechanizm. Dlatego zalecam wypróbowanie tej metody z dowolną flagą przed zaimplementowaniem jej do skryptów.

Wyszukiwanie PID

PID jest ważną właściwością każdego działającego procesu w systemie. Pozwala on na dokładniejsze przyporządkowanie do konkretnego procesu. Nazwa procesu nie jest całkiem pomocna w wielu sytuacjach, ponieważ ta sama binarka może tworzyć kopie samej siebie i wykonywać różne zadania równolegle.

Jeśli nie wiesz, jak uzyskać PID procesu, po prostu użyj „ps”, aby wyświetlić listę wszystkich uruchomionych procesów i przefiltrować wyjście za pomocą „grep” z nazwą procesu i/lub komendami.

ps -A

Teraz wykonaj filtrowanie za pomocą „grep”.

ps -A | grep <process_or_command>

Teraz sprawdź, do jakich plików ma dostęp ten PID.

lsof -p <PID >

Lista otwartych plików dla konkretnego urządzenia

Funkcjonalność „lsof” nie ogranicza się tylko do tych funkcji. Możesz również filtrować wynik działania „lsof” na podstawie urządzenia. W tym celu, polecenie będzie wyglądać coś takiego.

lsof <device_mount_point>

To polecenie jest bardzo przydatne, aby dowiedzieć się wszystkie uruchomione procesy z ich właścicielem informacje dostępu do określonego systemu plików. Jeśli masz problemy z odmontowaniem systemu plików, jest to najlepszy sposób, aby przejść.

lsof <busy_device_mount_point>

Lista otwartych plików w katalogu

Podobnie do poprzedniego przykładu, wystarczy przekazać ścieżkę katalogu do „lsof”, aby dowiedzieć się, czy jakikolwiek proces ma do niego dostęp.

Uwaga: „lsof” będzie sprawdzał katalog rekursywnie, więc może to zająć trochę czasu.

=lsof +D <directory_path>

Bonus: zakończ wszelką aktywność użytkownika

Bądź bardzo ostrożny z tą częścią, ponieważ może ona po prostu namieszać we wszystkim, co robi użytkownik. Następujące polecenie zabije wszystkie działające procesy użytkownika.

sudo kill -9 `lsof -t -u <username`

Podsumowanie

Funkcje „lsof” nie kończą się tylko tutaj. Te wymienione tutaj są tymi, które będą nam najbardziej potrzebne na co dzień. Istnieje wiele innych funkcji „lsof”, które mogą się przydać (oczywiście w szczególnych przypadkach).

Aby poznać wszystkie dostępne funkcje i ich zastosowanie, sprawdź strony man i info „lsof”.

man lsof

info lsof

lsof -?

Enjoy!

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.