Das Gute an Linux ist, dass Sie vom Bootvorgang bis zur Installation von Softwarepaketen alles einfach einsehen und verwalten können. Hier besprechen wir, wie Sie den Befehl lsof in Linux verwenden können, um geöffnete Dateien und die Prozesse, die sie verwenden, anzuzeigen. Wenn Sie wissen, wie Sie dies anzeigen können, können Sie besser verstehen, wie das System funktioniert, und sogar die erforderlichen Maßnahmen für bestimmte Prozesse ergreifen.
Lsof-Befehl
Um geöffnete Dateien und die dafür verantwortlichen Benutzer oder Prozesse anzuzeigen, verwenden wir die lsof
Dienstprogramm. Standardmäßig, lsof
ist in den meisten Distributionen vorinstalliert.
Wenn Sie es jedoch nicht installiert haben, können Sie es mit dem Paketmanager auf Ihrem System installieren.
Debian/Ubuntu
Führen Sie unter Debian den Befehl aus:
sudo apt-get install lsof
Bogen/Manjaro
Verwenden Sie auf Manjaro und anderen Arch-basierten Distributionen Pacman, indem Sie den folgenden Befehl ausführen:
sudo pacman -S lsof
CentOS/REHL/Fedora
Für CentOS und die REHL-Familie können Sie dnf verwenden:
sudo dnf install lsof
Verwenden Sie den Befehl lsof, um geöffnete Dateien für einen Linux-Prozess aufzulisten
Wie die meisten Linux-Befehle ist das Dienstprogramm lsof unglaublich einfach zu verwenden. Beginnen Sie mit der Eingabe des Befehls lsof
:
sudo lsof
Sobald Sie den obigen Befehl ausgeführt haben, sollte lsof Informationen über die geöffneten Dateien im System zurückgeben.
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,48 4096 2 / init 1 root rtd DIR 8,48 4096 2 / init 1 root txt REG 0,19 632048 281474976743906 /init init 1 root 0u CHR 1,3 0t0 15362 /dev/null init 1 root 1u CHR 1,3 0t0 15362 /dev/null init 1 root 2u CHR 1,3 0t0 15362 /dev/null init 1 root 3w CHR 1,11 0t0 15367 /dev/kmsg init 1 root 4u sock 0,8 0t0 22689 protocol: AF_VSOCK init 1 root 5r REG 0,4 0 4026532185 mnt init 1 root 6r REG 0,4 0 4026532201 mnt init 1 root 7r DIR 8,48 4096 240 /home/cap init 1 root 8u DIR 8,48 4096 2 / init 1 root 9u sock 0,8 0t0 21853 protocol: AF_VSOCK
Notiz: Wenn Sie über sudo-Berechtigungen verfügen, führen Sie den Befehl mit aus sudo
um „Zugriff verweigert“-Fehler bei bestimmten Dateien zu vermeiden.
Wie in der obigen Ausgabe gezeigt, hat die lsof-Ausgabe die folgenden Spalten:
Spalte | Darstellung |
---|---|
Befehl | Zeigt den Namen des Prozesses, der die Zieldatei verwendet. |
PID | Der eindeutige Bezeichner für den Prozess, der die Datei verwendet. |
TID | Die Spalte zeigt die Thread-ID. |
TASKCMD | Der Name des Aufgabenbefehls. |
BENUTZER | Benutzername oder UID des Benutzers, der den Prozess ausführt. |
FD | Dateideskriptor der Datei und Modi. |
TYP | Der Zieldatei zugeordneter Knoten. |
GERÄT | Gerätenummer durch Kommas getrennt. |
GRÖSSE/AUS | Dateigröße in Bytes der Dateioffsetgröße |
KNOTEN | Inode-Wert der lokalen Datei. Sie können den stat-Befehl verwenden, um anzuzeigen inode Informationen für die Datei. |
NAME | Einhängepunkt der Datei. |
Nachdem Sie nun verstanden haben, was der Inhalt des lsof-Befehlsausdrucks darstellt, lassen Sie uns den Befehl verwenden, um nach bestimmten Informationen zu filtern.
So filtern Sie nach bestimmten Prozessen
Um nur nach bestimmten Dateien zu filtern, die von einem bestimmten Prozess geöffnet wurden, können wir entweder den Prozessnamen oder den PID-Wert verwenden.
Um beispielsweise Dateien anzuzeigen, die vom Firefox-Prozess verwendet werden, können wir den Befehl verwenden:
sudo lsof -c firefox

Der Befehl zeigt alle Dateien an, die vom Firefox-Prozess geöffnet wurden.
Um nach Prozess-ID zu filtern, können wir die verwenden -p
Option und übergeben Sie die Prozess-ID. Du kannst den … benutzen top
Befehl, um die Prozess-ID des Zielprozesses abzurufen.
Um beispielsweise die PID des Firefox-Prozesses zu erhalten, können wir den Befehl verwenden:
sudo ps aux | grep firefox
Sobald Sie die PID des Zielprozesses haben, verwenden Sie lsof, um die geöffneten Dateien anzuzeigen:
sudo lsof -p 2121

Der obige Befehl druckt die vom Prozess geöffneten Dateien mit der angegebenen PID.
So filtern Sie nach einem bestimmten Benutzer
Um nur die von einem bestimmten Benutzer geöffneten Dateien anzuzeigen, können wir die verwenden -u
Flagge. Um beispielsweise nach dem Debian-Benutzer zu filtern, verwenden Sie den Befehl:
sudo lsof -u debian

So filtern Sie nach einer bestimmten Datei
Angenommen, Sie möchten nur den Prozess und den Benutzer wissen, der eine bestimmte Datei geöffnet hat. Übergeben Sie dazu den Namen der Datei an lsof:
sudo lsof /bin/sleep

Das Obige filtert nur nach der bestimmten Datei und gibt die zugehörigen Informationen zurück, einschließlich Benutzer, Prozess-ID und mehr.
Einpacken
In diesem einfachen Tutorial haben wir besprochen, wie Sie das System mit dem Befehl lsof in Linux nach Informationen zu geöffneten Dateien abfragen. Hier sind einige zusätzliche Befehle, mit denen Sie den Inhalt eines Verzeichnisses im Terminal auflisten können.