W systemie cały czas działa wiele procesów, które uzyskują dostęp do różnych plików systemu. Pliki te mogą być plikami dyskowymi, skryptami, gniazdami sieciowymi, urządzeniami, nazwanymi potokami i innymi. Używając „lsof” można wykonać wiele rzeczy, takich jak debugowanie. Jest to również przydatne dla administratorów systemu, aby dowiedzieć się, jakie pliki są dostępne przez jakie procesy. Jednym z najbardziej przydatnych scenariuszy, jakie znalazłem, jest sytuacja, w której masz zamiar odmontować system plików, ale nadal uzyskuje się do niego dostęp.
Bez zbędnych ceregieli zacznijmy od „lsof”! Zakładam, że twój obecny system UNIX/Linux ma już zainstalowany „lsof”.
Lokalizacja
który lsof
Zgłasza pełną ścieżkę polecenia, w tym przypadku „lsof”.
Wersja „lsof”lsof -v
Spowoduje to zgłoszenie szczegółowych informacji o wersji „lsof”, w tym daty kompilacji pliku binarnego, wersji kompilatora, flag kompilatora i innych.
Podstawowe użycie „lsof”
Uruchom sam „lsof”.
lsof
Raportuje DUŻĄ listę wszystkich plików, do których system uzyskuje dostęp w momencie uruchomienia polecenia.
Podczas gdy wszystkie pola są oczywiste, najczęściej mylisz się z kolumnami „FD” i „TYPE” i ich wartościami. Sprawdźmy je.
FD: Skrót od „Deskryptor pliku”. Wymyśla 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: urządzenie mapowane w pamięci
- ltx: tekst z biblioteki udostępnionej (dane i kod)
- m86: DOS Merge mapowany plik
Istnieją również inne wartości, które zauważysz w kolumnie, takie jak „1u”, a następnie u, r, w itd. wartość. Co to znaczy??
- r: Dostęp do odczytu
- w: Dostęp do zapisu
- u: Dostęp do odczytu i zapisu
- - : Tryb nieznany i zawiera znak blokady
- ": Tryb jest nieznany i nie ma znaku blokady
TYP: Opisuje typ pliku i jego identyfikację. Wartości są następujące.
- DIR: Katalog
- CHR: plik znaków specjalnych
- REG: Zwykły plik
- FIFO: Pierwsze weszło, pierwsze wyszło
Otwarte pliki specyficzne dla użytkownika
Linux to genialna platforma dla wielu użytkowników. Wielu użytkowników może jednocześnie uzyskiwać dostęp do systemu i wykonywać operacje, do których mają uprawnienia.
Aby sprawdzić pliki, do których uzyskuje dostęp określony użytkownik, uruchom następujące polecenie.
lsof -u
Jednak, aby sprawdzić użytkowników z wyższą rangą, „lsof” będzie potrzebował uprawnienia „superużytkownika”.
sudo lsof -u
Co powiesz na sprawdzenie wszystkich poleceń i plików, do których uzyskuje dostęp określony użytkownik?? Uruchom następujący.
lsof-i-u
Ponownie, dla użytkowników z wyższą rangą, „lsof” będzie potrzebował uprawnienia „superużytkownika”.
sudo lsof-i-u
Procesy uruchomione specyficzne dla portu
Aby znaleźć wszystkie procesy, które aktualnie używają określonego portu, wywołaj „lsof” z flagą „-i”, a następnie protokołem i informacjami o porcie.
lsof-i<46>:
Na przykład, aby sprawdzić wszystkie programy, które obecnie uzyskują dostęp do portu 80 przez protokół TCP/IP, uruchom następujące polecenie.
lsof-i TCP:80
Ta metoda może być również użyta do pokazania wszystkich procesów, które używają portów w określonym zakresie, na przykład od 1 do 1000. Struktura poleceń jest podobna do poprzedniej z odrobiną magii w części dotyczącej numeru portu.
lsof-i TCP: 1-1000
Procesy specyficzne dla protokołu
Oto 2 przykłady pokazujące procesy, które obecnie wykorzystują protokoły IPv4 i IPv6.
lsof -i 4lsof-i 6
Wyświetlanie listy połączeń sieciowych
Następujące polecenie zgłosi wszystkie połączenia sieciowe z bieżącego systemu.
lsof-i
Wykluczanie z ^
Tak, możemy wykluczyć konkretnego użytkownika, port, FD i inne za pomocą znaku „^”. Wszystko, co musisz zrobić, to używać go ostrożnie, aby nie zepsuć całego wyjścia.
W tym przykładzie wykluczmy wszystkie procesy z użytkownika „root”.
lsof -u^root
Istnieją inne sposoby wykorzystania 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 wersji demonstracyjnej tej metody z dowolną flagą przed zaimplementowaniem jej w niektórych skryptach.
Wyszukiwanie PID
PID jest ważną właściwością każdego uruchomionego procesu w systemie. Pozwala na dokładniejsze wskazanie określonego procesu. Nazwa procesu nie jest zbyt pomocna w wielu sytuacjach, ponieważ ten sam plik binarny może tworzyć swoje kopie i równolegle wykonywać różne zadania.
Jeśli nie wiesz, jak uzyskać PID procesu, po prostu użyj „ps”, aby wyświetlić wszystkie uruchomione procesy i przefiltruj dane wyjściowe za pomocą „grep” z nazwą procesu i/lub poleceniami.
ps -A
Teraz wykonaj filtrowanie za pomocą „grep”.
ps -A | grep
Teraz sprawdź, do jakich plików uzyskuje dostęp PID.
lsof -pWyświetlanie listy otwartych plików dla określonego urządzenia
Funkcjonalność „lsof” nie ogranicza się tylko do tych funkcji. Możesz również filtrować wynik „lsof” według urządzenia. W tym celu polecenie będzie wyglądać mniej więcej tak.
lsof
To polecenie jest bardzo przydatne, aby znaleźć wszystkie uruchomione procesy z informacjami o ich właścicielu uzyskującym dostęp do określonego systemu plików. Jeśli masz problemy z odmontowaniem systemu plików, jest to najlepszy sposób.
lsofWyświetl listę otwartych plików w katalogu
Podobnie jak w poprzednim przykładzie, po prostu przekaż ścieżkę katalogu do „lsof”, aby dowiedzieć się, czy jakiś proces ma do niego dostęp.
Uwaga: „lsof” sprawdza katalog rekursywnie, więc może to zająć trochę czasu.
=lsof +D
Bonus: zakończ całą aktywność użytkownika
Zachowaj szczególną ostrożność przy tej części, ponieważ może po prostu zepsuć wszystko, co robi użytkownik. Następujące polecenie zabije wszystkie uruchomione procesy użytkownika.
sudo zabić -9 'lsof -t -uCechy „lsof” nie kończą się tutaj. Te wymienione tutaj to te, których będziemy potrzebować najbardziej na co dzień. Istnieje wiele innych funkcji „lsof”, które mogą się przydać (oczywiście w konkretnych przypadkach).
Aby zapoznać się ze wszystkimi dostępnymi funkcjami i ich wykorzystaniem, sprawdź strony podręcznika i informacje „lsof”.
człowiek lsofinformacje lsof
lsof -?
Cieszyć się!