Jak wyświetlić listę otwartych plików dla procesu w systemie Linux?

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.

ParametrOpis
KomendaPokazuje nazwę polecenia otwierającego plik.
PIDNumer identyfikacyjny procesu, który otwiera plik.
TIDNumer identyfikacyjny wątku. Może to być wątek lub numer zadania.
UżytkownikIdentyfikator użytkownika lub nazwa użytkownika będącego właścicielem procesu.
FDPokazuje deskryptor pliku.
RodzajTyp węzła skojarzonego z plikiem.
UrządzeniePokazuje numery urządzeń.
Rozmiar/WyłPokazuje rozmiar pliku w bajtach.
WęzełPokazuje numer i-węzła katalogu lub katalogu nadrzędnego.
NazwaPokazuje 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.