Anleitung zur Verwendung des Befehls ‚lsof‘ für einen Prozess
Wenn Sie ein häufiger Benutzer von Linux- oder Unix-Systemen sind, müssen Sie sicherlich den Satz „Unter Linux ist alles eine Datei“ gehört haben. Dies kann als eine zu starke Vereinfachung des Konzepts kategorisiert werden, es erweist sich jedoch als sehr hilfreich zu verstehen, wie Dateien im Linux-System funktionieren.
Nicht alles, was in der Linux-Umgebung erscheint, muss eine Datei sein. Manchmal kann es ein Prozess sein, es kann eine spezielle Datei sein, die die Hardwareinformationen, Verzeichnisse und andere Dinge darstellt.
In diesem Tutorial erfahren Sie, wie Sie alle Dateien finden, die für einen bestimmten Prozess unter Linux geöffnet sind.
Einführung zu lsof
Befehl
Das Schöne am Linux-System ist, dass Sie Ihr gesamtes System über das Terminal steuern und verwalten können, vorausgesetzt, Sie kennen die Befehle gut. Sobald die Befehle bekannt sind, werden alle Aufgaben auf dem Terminal zu einem Kinderspiel.
lsof
steht für 'Liste der geöffneten Dateien‘. Sobald Sie die lange Version des Befehls kennen, wird es für Sie sehr einfach, den Befehl zu verstehen und produktiv zu verwenden.
Der lsof
-Befehl zeigt die Listen der geöffneten Dateien, Sockets und Pipes an. Mit diesem Befehl können Sie ganz einfach nach den geöffneten Dateien suchen. Wenn das lsof
Der Befehl wird ohne Option verwendet und zeigt alle geöffneten Dateien in Bezug auf die aktiven Prozesse an, die ausgeführt werden.
Notiz: Stellen Sie sicher, dass Sie verwenden sudo
beim Ausführen der Befehle.
Verwendung der lsof
Befehl
Wir werden die Ausgabe der lsof
Befehl im Detail. Studieren Sie den folgenden Befehl.
sudo lsof | weniger
Notiz: Wenn wir das direkt ausführen lsof
Befehl wird die Ausgabe sehr groß und kann Verwirrung stiften, um fortzufahren. Daher habe ich hier verwendet lsof | weniger
Befehl für die Bequemlichkeit des Tutorials.
Ausgabe:
gaurav@ubuntu:~$ sudo lsof | weniger BEFEHL PID TID BENUTZER FD TYP GERÄTEGRÖSSE/AUS KNOTENNAME kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 root txt unbekannt /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 unbekannt /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 unbekannt /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 unbekannt /proc/34/exe
Im Folgenden sind die Attribute aufgeführt, die mit dem . angezeigt werden lsof
Befehl.
Parameter | Beschreibung |
---|---|
Befehl | Zeigt den Namen des Befehls an, der die Datei öffnet. |
PID | Prozess-ID-Nummer des Prozesses, der die Datei öffnet. |
TID | Thread-Identifikationsnummer. Dies kann entweder ein Thread oder eine Aufgabennummer sein. |
Nutzer | Benutzer-ID oder Name des Benutzers, der der Eigentümer des Prozesses ist. |
FD | Zeigt den Dateideskriptor der Datei an. |
Typ | Knotentyp, der der Datei zugeordnet ist. |
Gerät | Zeigt Gerätenummern an. |
Größe/Aus | Zeigt die Größe der Datei in Byte an. |
Knoten | Zeigt die Inode-Nummer des Verzeichnisses oder des übergeordneten Verzeichnisses an. |
Name | Zeigt den Namen des Dateisystems an, in dem sich der Prozess befindet. |
Auflisten der Prozesse
In erster Linie ist es wichtig, dass Sie die laufenden Prozesse und ihre jeweiligen Prozess-IDs erhalten. Linux bietet eine Vielzahl von Befehlen, um die Prozesse zusammen mit ihren Attributen wie PID, Benutzer, Verzeichnis usw. aufzulisten.
Sie können die Befehle verwenden wie oben
, ps
, htop
, pstree
um die Prozesse auf dem Terminal aufzulisten.
Während des gesamten Tutorials verwende ich die oben
Befehl dazu. Der oben
Befehl bietet eine dynamische Echtzeitansicht eines laufenden Systems. Es zeigt auch alle Prozesse und Threads an, die derzeit vom Linux-Kernel verwaltet werden. Studieren Sie den unten angegebenen Block, um die Ausgabe der zu überprüfen oben
Befehl.
Syntax:
sudo nach oben
Ausgabe:
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 Webinhalt 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 Web Content 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 E 0.0 0.0 0:00.00 kworker/0:0H 6 root 0 -20 0 0 0 E 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 E 0.0 0.0 0:22.32 rcu_sched 9 root 20 0 0 0 0 E 0.0 0.0 0:00.00 rcu_bh 10 root rt 0 0 0 0 S 0.0 0.0 0:03.13 Migration/0
Im obigen Block sehen wir alle prozessbezogenen Informationen an einem Ort. Von hier aus finden wir die PID
des Prozesses, von dem wir die geöffneten Dateien mit dem anzeigen müssen lsof
Befehl.
Wenn Sie jedoch nur die Prozess-ID eines bestimmten Prozesses herausfinden und andere unerwünschte Prozesse vermeiden möchten, verwenden Sie den folgenden Befehl.
Syntax:
sudo nach oben | grep [Prozessname]
Beispiel:
gaurav@ubuntu:~$ nach oben | 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:~$
Hier haben wir speziell die Prozess-ID des Prozesses angezeigt, der die Zeichenfolge ‚terminal‘ im Prozessnamen hat. Diese Methode ist praktisch, wenn Sie den vollständigen Prozessnamen oder die PID nicht kennen.
Anzeigen der geöffneten Dateien, die sich auf einen Prozess mit der PID beziehen
Im obigen Block haben wir gelernt, wie man mit Hilfe des Befehls top die prozessbezogenen Informationen erhält. Jetzt verwenden wir die PID
einem Prozess auf dem System entsprechen und versuchen Sie, die Liste der geöffneten Dateien, die sich auf diesen Prozess beziehen, anzuzeigen, indem Sie die lsof
Befehl.
Aus der oben angegebenen Ausgabe nehmen wir den Prozess, der der hervorgehobenen PID 1173 entspricht. Wir werden die verwenden lsof -p [PID]
Befehl dazu.
Syntax:
sudo lsof -p [PID]
Dieser Befehl nimmt die PID des Prozesses als Eingabe und listet alle Dateien auf, die dieser PID entsprechen.
Ausgabe:
gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: WARNUNG: can't stat() fuse.gvfsd-fuse Dateisystem /run/user/1000/gvfs Ausgabeinformationen sind möglicherweise unvollständig. BEFEHL PID BENUTZER FD TYP GERÄTEGRÖSSE/AUS KNOTENNAME 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/mongo/ .mongod 1173 mongodb mem REG 8,8 71776 2624380 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem 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 mongod memm 1173 mongod 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 me 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 :~$
Die für den Prozess geöffneten Dateien mit der Prozess-ID 1713 werden mit dem lsof
Befehl.
Notiz: GNOME-Benutzer können auf die folgende Warnung stoßen. Sie können es getrost ignorieren.
lsof: WARNUNG: can't stat() Fuse.gvfsd-fuse Dateisystem /run/user/1000/gvfs Die Ausgabeinformationen sind möglicherweise unvollständig.
Auflisten von geöffneten Dateien, die sich auf einen Prozess beziehen, unter Verwendung des Prozessnamens
Der lsof
Der Befehl bietet Ihnen auch die Möglichkeit, die geöffneten Dateien mit den Namen der Prozesse aufzulisten. Die Namen sollten dem Befehl als Eingabezeichenfolge bereitgestellt werden. Sehen Sie sich die Syntax unten an, um diese Option zu verwenden.
Syntax:
sudo lsof -c [Prozessname]
Beispiel:
sudo lsof -c mysql
Ausgabe:
gaurav@ubuntu:~$ sudo lsof -c mysql lsof: WARNUNG: stat() kann nicht fuuse.gvfsd-fuse Dateisystem /run/user/1000/gvfs Ausgabeinformationen können unvollständig sein. BEFEHL PID BENUTZER FD TYP GERÄTEGRÖSSE/AUS KNOTENNAME mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 4096 2 / mysqld 1266 mysql txt REG 8,8 24691368 . 28894 /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 47576 2624592 / 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
Die Ausgabe erfolgt wie diejenige, in der die Prozess-ID anstelle des Prozessnamens verwendet wird.
Auflisten von Dateien, die von Netzwerkverbindungen geöffnet wurden
Unter Linux können Dateien auch in Form von Informationen über Ihre Netzwerkverbindungen, Hardwareverbindungen usw. vorliegen. Wir können verwenden lsof
Befehl, um die von der Netzwerkverbindung geöffneten Dateien aufzulisten. Verwenden Sie die folgende Methode.
sudo lsof -i
Ausgabe:
gaurav@ubuntu:~$ sudo lsof -i BEFEHL PID BENUTZER FD TYP GERÄTEGRÖSSE/AUS KNOTENNAME systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 13u IPv4 17358 0t0 TCP localhost: domain (LISTEN) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP *:mdns avahi-dae 1028 avahi 13u IPv6 23811 0t0 UDP *:m 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 (LISTEN) mysqld 1266 mysql 0t IPv4 TCP 25992 19u IPv4 TCP 25992 19u IPv4 mysql (LISTEN) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (LISTEN) gaurav@ubuntu:~$
Hier können wir die Informationen zu den Dateien sehen, die über die Netzwerkverbindung mit dem geöffnet sind lsof -i
Befehl.
Fazit
In diesem einfachen Tutorial haben wir gelernt, wie Sie geöffnete Dateien für einen Prozess unter Linux mit verschiedenen einfach zu verwendenden Methoden auflisten. Für weitere Verwendungen des lsof
Befehl, siehe die lsof
man-Seite.