Przewodnik po użyciu polecenia „lsof” dla procesu
Jeśli jesteś częstym użytkownikiem systemów Linux lub Unix, z pewnością słyszałeś zdanie „W Linuksie wszystko jest plikiem”. Można to sklasyfikować jako nadmierne uproszczenie koncepcji, ale okazuje się bardzo pomocne w zrozumieniu, jak działają pliki w systemie Linux.
Nie wszystko, co pojawia się w środowisku Linux, musi być plikiem. Czasami może to być proces, może to być specjalny plik reprezentujący informacje o sprzęcie, katalogi i inne rzeczy.
Ten samouczek przeprowadzi Cię przez proces znajdowania wszystkich plików, które są otwarte dla określonego procesu w systemie Linux.
Wstęp do lsof
Komenda
Piękno systemu Linux polega na tym, że możesz kontrolować i zarządzać całym systemem za pośrednictwem terminala, pod warunkiem, że dobrze znasz polecenia. Gdy polecenia są znane, wszystkie zadania na terminalu stają się bułką z masłem.
lsof
oznacza 'Lista otwartych plików„. Po zapoznaniu się z długą wersją polecenia, zrozumienie i używanie polecenia w sposób produktywny staje się bardzo łatwe.
ten lsof
polecenie wyświetla listy otwartych plików, gniazd i potoków. Za pomocą tego polecenia możesz łatwo wyszukiwać otwarte pliki. Kiedy lsof
Polecenie jest używane bez żadnej opcji, wyświetla wszystkie otwarte pliki w odniesieniu do aktywnych procesów, które są uruchomione.
Notatka: Upewnij się, że używasz sudo
podczas wykonywania poleceń.
Używając lsof
Komenda
Przeanalizujemy wyniki projektu lsof
polecenia szczegółowo. Przestudiuj następujące polecenie.
sudo lsof | mniej
Notatka: Jeśli bezpośrednio uruchamiamy lsof
polecenie, wynik będzie bardzo duży i może spowodować zamieszanie, aby przejść dalej. Stąd tutaj użyłem lsof | mniej
polecenie dla wygody samouczka.
Wyjście:
gaurav@ubuntu:~$ sudo lsof | mniej POLECENIE PID TID UŻYTKOWNIK FD TYP URZĄDZENIA ROZMIAR/OFF NAZWA WĘZŁA kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 root txt nieznany /proc/31/exe netns 32 root cwd DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt nieznany /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 33 root rtd DIR 8,8 4096 2 / rcu_tasks 33 root txt nieznany /proc/33/exe kauditd 34 root cwd DIR 8,8 4096 2 / kauditd 34 root rtd DIR 8,8 4096 2 / kauditd 34 root txt nieznany /proc/34/exe
Poniżej znajdują się atrybuty, które są wyświetlane za pomocą lsof
Komenda.
Parametr | Opis |
---|---|
Komenda | Pokazuje nazwę polecenia otwierającego plik. |
PID | Numer identyfikacyjny procesu, który otwiera plik. |
TID | Numer identyfikacyjny wątku. Może to być wątek lub numer zadania. |
Użytkownik | Identyfikator użytkownika lub nazwa użytkownika będącego właścicielem procesu. |
FD | Pokazuje deskryptor pliku. |
Rodzaj | Typ węzła skojarzonego z plikiem. |
Urządzenie | Pokazuje numery urządzeń. |
Rozmiar/Wył | Pokazuje rozmiar pliku w bajtach. |
Węzeł | Pokazuje numer i-węzła katalogu lub katalogu nadrzędnego. |
Nazwa | Pokazuje nazwę systemu plików, w którym znajduje się proces. |
Lista procesów
Przede wszystkim ważne jest, aby uzyskać uruchomione procesy i ich odpowiednie identyfikatory procesów. Linux zapewnia różnorodne polecenia do wyświetlenia procesów wraz z ich atrybutami, takimi jak PID, użytkownik, katalog itp.
Możesz używać poleceń takich jak szczyt
, ps
, htop
, pstree
aby wyświetlić listę procesów na terminalu.
W trakcie tego samouczka będę używał szczyt
polecenie, aby to zrobić. ten szczyt
Polecenie zapewnia dynamiczny podgląd działającego systemu w czasie rzeczywistym. Wyświetla również wszystkie procesy i wątki aktualnie zarządzane przez jądro Linuksa. Przestudiuj podany poniżej blok, aby sprawdzić wynik działania szczyt
Komenda.
Składnia:
sudo top
Wyjście:
gaurav@ubuntu:~$sudo top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1,142g 103584 R 88,2 30,5 87:48,08 Zawartość sieci 1173 mongodb 20 0 288536 6776 3428 S 5,9 0,2 2: 34,41 mongod 13765 gaurav 20 0 2931568 131408 47496 S 5.9 3.3 1:42.34 Zawartość sieci Web 1 root 20 0 225904 6824 4900 S 0.0 0.2 0:27.25 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd 4 root 0 -20 0 0 0 Ja 0.0 0.0 0:00.00 kworker/0:0H 6 root 0 -20 0 0 0 Ja 0.0 0.0 0:00.00 mm_percpu_wq 7 root 20 0 0 0 0 S 0.0 0.0 0:01.89 ksoftirqd/0 8 root 20 0 0 0 0 Ja 0.0 0.0 0:22.32 rcu_sched 9 root 20 0 0 0 0 Ja 0.0 0.0 0:00.00 rcu_bh 10 root rt 0 0 0 0 S 0.0 0.0 0:03.13 migracja/0
W powyższym bloku możemy zobaczyć wszystkie informacje związane z procesem w jednym miejscu. Stąd możemy znaleźć PID
procesu, którego musimy wyświetlić otwarte pliki za pomocą lsof
Komenda.
Ale jeśli chcesz znaleźć identyfikator procesu tylko określonego procesu i uniknąć innych niechcianych procesów, użyj następującego polecenia.
Składnia:
sudo top | grep [Nazwa_procesu]
Przykład:
gaurav@ubuntu:~$ góra | grep terminal 13819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0:53.63 gnome-terminal- 13819 gaurav 20 0 803336 19728 9160 S 1.0 0.5 0:53.66 gnome-terminal- 13819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0:53.67 gnome -terminal- gaurav@ubuntu:~$
Tutaj specjalnie pokazaliśmy identyfikator procesu, który ma ciąg „terminal” w nazwie procesu. Ta metoda jest przydatna, gdy nie znasz pełnej nazwy procesu lub PID.
Wyświetlanie otwartych plików związanych z procesem wykorzystującym PID
W powyższym bloku dowiedzieliśmy się, jak uzyskać informacje związane z procesem za pomocą górnego polecenia. Teraz użyjemy PID
odpowiadającemu dowolnemu procesowi w systemie i spróbuj wyświetlić listę otwartych plików związanych z tym procesem za pomocą lsof
Komenda.
Z powyższego wyjścia weźmy proces odpowiadający podświetlonemu PID 1173. Będziemy używać lsof -p [PID]
polecenie, aby to zrobić.
Składnia:
sudo lsof -p [PID]
To polecenie pobiera PID procesu jako dane wejściowe i wyświetla wszystkie pliki odpowiadające temu PID.
Wyjście:
gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: OSTRZEŻENIE: nie można stat() użyć systemu plików fuse.gvfsd-fuse /run/user/1000/gvfs Informacje wyjściowe mogą być niekompletne. POLECENIE PID UŻYTKOWNIK TYP FD URZĄDZENIE ROZMIAR/OFF NAZWA WĘZŁA mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb txt REG 8,8 38379496 2885608 /usr/bin/mongod 1173 pamięć mongodb REG 8,8 71776 2624380 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 pamięć mongodb REG 8,8 101168 2624643 /lib/x86_64-linux-gnu/libresolv-2.27.so mongod 1173 mongodb mem REG 8,8 26936 2624439 /lib/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 mongodb mem REG 8,8 10160 2626002 /lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2 mongodb me 1173 MON 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mongod 1173 mongodb mem REG 8,8 3004224 2909671 /usr/lib/locale/locale-archive mongod 1173 mongodb mem REG 8,8 2030544 2621501 / lib/x86_64-linux-gnu/libc-2.27.so mongod 1173 mongodb mem REG 8,8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod 1173 mongodb mem REG 8,8 96616 2624649 /lib/ x86_64-linux-gnu/libgcc_s.so.1 mongod 1173 mongodb mnie m REG 8,8 1700792 2622735 /lib/x86_64-linux-gnu/libm-2.27.so mongod 1173 mongodb mem REG 8,8 14560 2621535 /lib/x86_64-linux-gnu/libdl-2.27.so mongod 1173 mongodb mem REG 8,8 31680 2624646 /lib/x86_64-linux-gnu/librt-2.27.so mongod 1173 mongodb mem REG 8,8 2357760 2890079 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 gaurav@ubuntu :~$
Pliki otwarte dla procesu z identyfikatorem procesu 1713 są wyświetlane za pomocą lsof
Komenda.
Notatka: Użytkownicy GNOME mogą napotkać poniższe ostrzeżenie. Możesz to spokojnie zignorować.
lsof: OSTRZEŻENIE: nie można stat()ować systemu plików fuse.gvfsd-fuse /run/user/1000/gvfs Informacje wyjściowe mogą być niekompletne.
Wyświetlanie listy otwartych plików powiązanych z procesem przy użyciu nazwy procesu
ten lsof
Polecenie zapewnia również opcję wyświetlenia listy otwartych plików przy użyciu nazw procesów. Nazwy należy podać w poleceniu jako ciąg wejściowy. Zobacz poniższą składnię, aby użyć tej opcji.
Składnia:
sudo lsof -c [nazwa procesu]
Przykład:
sudo lsof -c mysql
Wyjście:
gaurav@ubuntu:~$ sudo lsof -c mysql lsof: OSTRZEŻENIE: nie można stat() użyć systemu plików fuse.gvfsd-fuse /run/user/1000/gvfs Informacje wyjściowe mogą być niekompletne. POLECENIE PID UŻYTKOWNIK FD TYP URZĄDZENIE ROZMIAR/OFF NAZWA WĘZŁA mysqld 1266 mysql cwd KATALOG 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd KATALOG 8,8 4096 2 / mysqld 1266 mysql txt /REG 8,8941169 /sbin/mysqld mysqld 1266 mysql mem REG 8,8 6288 5505444 /usr/lib/mysql/plugin/auth_socket.so mysqld 1266 mysql DEL REG 0,18 28127 /[aio] mysqld 1266 mysql DEL /[ REG 0,18 28126 aio] mysqld 1266 mysql DEL REG 0,18 28125 /[aio] mysqld 1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mysqld 1266 mysql mem REG 8,8 / 47576245 lib/x86_64-linux-gnu/libnss_nis-2.27.so mysqld 1266 mysql mem REG 8,8 39744 2624438 /lib/x86_64-linux-gnu/libnss_compat-2.27.so
Wynik będzie taki, jak ten, w którym zamiast nazwy procesu używany jest identyfikator procesu.
Wyświetlanie listy plików otwieranych przez połączenia sieciowe
W systemie Linux pliki mogą również mieć postać informacji o połączeniach sieciowych, połączeniach sprzętowych itp. Możemy użyć lsof
polecenie, aby wyświetlić listę plików otwieranych przez połączenie sieciowe. Użyj następującej metody.
sudo lsof-i
Wyjście:
gaurav@ubuntu:~$ sudo lsof -i POLECENIE PID UŻYTKOWNIK TYP FD ROZMIAR URZĄDZENIA/WYŁ NAZWA WĘZŁA systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domena systemd-r 969 systemd-resolve 13u IPv4 17358 0t0 TCP localhost: domena (LISTEN) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domena avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP *:mdns avahi-dae 1028 avahi 13u IPv6 23811 *: mt0 UDP avahi-dae 1028 avahi 14u IPv4 23812 0t0 UDP *:58999 avahi-dae 1028 avahi 15u IPv6 23813 0t0 UDP *:37512 mongod 1173 mongodb 6u IPv4 28149 0t0 TCP localhost:27017 (SŁUCHAJ) mysqld 1266 IPv4 mysql99 lokalny 19 mysql (SŁUCHAJ) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (SŁUCHAJ) gaurav@ubuntu:~$
Tutaj możemy zobaczyć informacje o plikach, które są otwierane przez połączenie sieciowe za pomocą lsof-i
Komenda.
Wniosek
W tym prostym samouczku nauczyliśmy się wyświetlać listę otwartych plików dla procesu w systemie Linux przy użyciu różnych, łatwych w użyciu metod. Więcej zastosowań lsof
polecenie, zobacz lsof
strona podręcznika.