Die lsof Der Befehl in Linux zeigt in seiner Ausgabe Informationen zu Dateien an, die von Prozessen geöffnet werden. In diesem Artikel besprechen wir das Linux-Tool lsof anhand von 15 leicht verständlichen Beispielen. Bitte beachten Sie, dass alle in diesem Tutorial erwähnten Beispiele auf Ubuntu 20.04 LTS getestet wurden, aber auch auf anderen Linux-Distributionen wie Debian, Fedora und CentOS funktionieren.
Über den lsof-Befehl
Wenn Sie schnell den Namen von Dateien sehen möchten, die von einem bestimmten Prozess (oder allen Prozessen) geöffnet wurden, können Sie dies mit dem Befehl lsof tun. Eine geöffnete Datei kann eine normale Datei oder ein Verzeichnis, eine Bibliothek, eine spezielle Datei oder ein Blockgerät, eine spezielle Zeichendatei, eine ausführende Textreferenz oder sogar ein Stream oder eine Netzwerkdatei sein. Sie können Prozesse auch nach Portnummer auflisten. Wenn Sie nicht als Root-Benutzer angemeldet sind, müssen Sie den Befehlen möglicherweise 'sudo' voranstellen.
Linux-lsof-Befehl installieren
Bei den meisten Linux-Distributionen ist lsof vorinstalliert. Wenn es noch nicht auf Ihrem System installiert ist, verwenden Sie die folgenden Befehle:
Auf Ubuntu und Debian:
$ sudo apt install lsof
Unter CentOS und Fedora:
$ dnf install lsof
1. Wie man alle geöffneten Dateien auflistet
Um alle geöffneten Dateien aufzulisten, führen Sie den Befehl lsof ohne Argumente aus:
lsof
Hier ist zum Beispiel der Screenshot eines Teils der Ausgabe, die der obige Befehl auf meinem System erzeugt hat:
Die erste Spalte stellt den Prozess dar, während die letzte Spalte den Dateinamen enthält. Einzelheiten zu allen Spalten finden Sie auf der Manpage des Befehls.
2. So listen Sie Dateien auf, die von Prozessen geöffnet wurden, die einem bestimmten Benutzer gehören
Mit dem Tool können Sie auch Dateien auflisten, die von Prozessen geöffnet wurden, die einem bestimmten Benutzer gehören. Auf diese Funktion kann mit -u zugegriffen werden Befehlszeilenoption.
lsof -u [Benutzername]
Zum Beispiel:
lsof -u Administrator
3. Dateien basierend auf ihrer Internetadresse auflisten
Mit dem Tool können Sie Dateien anhand ihrer Internetadresse auflisten. Dies kann mit -i erfolgen Befehlszeilenoption. Wenn Sie möchten, können Sie sich beispielsweise IPv4- und IPv6-Dateien getrennt anzeigen lassen. Führen Sie für IPv4 den folgenden Befehl aus:
lsof -i 4
Zum Beispiel:
Führen Sie in ähnlicher Weise für IPv6 den folgenden Befehl aus:
lsof -i 6
Zum Beispiel:
lsof -i 6
4. So listen Sie alle Dateien nach Anwendungsnamen auf
Die Befehlszeilenoption -c ermöglicht es Ihnen, alle geöffneten Dateien nach Programmnamen abzurufen.
$ lsof -c apache
Sie müssen nicht den vollständigen Programmnamen verwenden, da alle Programme angezeigt werden, die mit dem Wort „Apache“ beginnen. In unserem Fall werden also alle Prozesse der Anwendung „Apache2“ aufgelistet.
Die Option -c ist im Grunde nur eine Abkürzung für die beiden Befehle:
$ lsof | grep apache
5. Wie man prozessspezifische Dateien auflistet
Mit dem Tool können Sie auch geöffnete Dateien basierend auf Prozessidentifikationsnummern (PID) anzeigen. Dies kann mit -p erfolgen Befehlszeilenoption.
lsof -p [PID]
Zum Beispiel:
lsof -p 856
Im weiteren Verlauf können Sie auch bestimmte PIDs in der Ausgabe ausschließen, indem Sie ^ hinzufügen Symbol vor ihnen. Um eine bestimmte PID auszuschließen, können Sie den folgenden Befehl ausführen:
lsof -p [^PID]
Zum Beispiel:
lsof -p ^1
Wie Sie im obigen Screenshot sehen können, ist der Prozess mit der ID 1 von der Liste ausgeschlossen.
6. Wie man IDs von Prozessen auflistet, die eine bestimmte Datei geöffnet haben
Mit dem Tool können Sie IDs von Prozessen auflisten, die eine bestimmte Datei geöffnet haben. Dies kann mit dem -t erfolgen Befehlszeilenoption.
$ lsof -t [file-name]
Zum Beispiel:
$ lsof -t /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0
7. Wie man alle geöffneten Dateien in einem Verzeichnis auflistet
Wenn Sie möchten, können Sie mit lsof auch nach allen geöffneten Instanzen eines Verzeichnisses suchen (einschließlich aller darin enthaltenen Dateien und Verzeichnisse). Auf diese Funktion kann mit +D zugegriffen werden Befehlszeilenoption.
$ lsof +D [Verzeichnispfad]
Zum Beispiel:
$ lsof +D /usr/lib/locale
8. So listen Sie alle Internet- und x.25 (HP-UX)-Netzwerkdateien auf
Dies ist mit dem -i möglich Befehlszeilenoption, die wir zuvor beschrieben haben. Nur, dass Sie es ohne Argumente verwenden müssen.
$ lsof -i
9. Finden Sie heraus, welches Programm einen Port verwendet
Der Schalter -i des Befehls ermöglicht es Ihnen, einen Prozess oder eine Anwendung zu finden, die auf eine bestimmte Portnummer lauscht. Im folgenden Beispiel habe ich überprüft, welches Programm Port 80 verwendet.
$ lsof -i :80
Anstelle der Portnummer können Sie den Dienstnamen verwenden, der in /etc/services aufgeführt ist Datei. Beispiel zum Überprüfen, welche App den HTTPS-Port (443) abhört:
$ lsof -i :https
Ergebnis:
Die obigen Beispiele prüfen sowohl TCP als auch UDP. Wenn Sie nur nach TCP oder UDP suchen möchten, stellen Sie das Wort „tcp“ oder „udp“ voran. Welche Anwendung verwendet beispielsweise Port 25 TCP:
$ lsof -i tcp:25
oder welche App den UDP-Port 53 verwendet:
$ lsof -i udp:53
10. So listen Sie geöffnete Dateien basierend auf dem Portbereich auf
Mit dem Dienstprogramm können Sie auch offene Dateien basierend auf einem bestimmten Port oder Portbereich auflisten. Um beispielsweise geöffnete Dateien für Port 1-1024 anzuzeigen, verwenden Sie den folgenden Befehl:
$ lsof -i :1-1024
11. So listen Sie geöffnete Dateien basierend auf dem Verbindungstyp (TCP oder UDP) auf
Mit dem Tool können Sie Dateien basierend auf der Art der Verbindung auflisten. Verwenden Sie beispielsweise für UDP-spezifische Dateien den folgenden Befehl:
$ lsof -i udp
Ebenso können Sie lsof TCP-spezifische Dateien anzeigen lassen.
12. Wie man eine lsof-Liste der übergeordneten PID von Prozessen erstellt
Es gibt auch eine Option, die lsof zwingt, die Parent Process IDentification (PPID)-Nummer in der Ausgabe aufzulisten. Die betreffende Option ist -R .
$ lsof -R
Um PPID-Informationen für eine bestimmte PID abzurufen, können Sie den folgenden Befehl ausführen:
$ lsof -p [PID] -R
Zum Beispiel:
$ lsof -p 3 -R
13. So finden Sie die Netzwerkaktivität nach Benutzer
Durch die Verwendung einer Kombination der Befehlszeilenoptionen -i und -u können wir nach allen Netzwerkverbindungen eines Linux-Benutzers suchen. Dies kann hilfreich sein, wenn Sie ein System untersuchen, das möglicherweise gehackt wurde. In diesem Beispiel prüfen wir alle Netzwerkaktivitäten des Benutzers www-data:
$ lsof -a -i -u www-data
14. Alle speicherabgebildeten Dateien auflisten
Dieser Befehl listet alle speicherabgebildeten Dateien unter Linux auf.
$ lsof -d mem
15. Alle NFS-Dateien auflisten
Die Option -N zeigt Ihnen eine Liste aller NFS-Dateien (Network File System).
$lsof -N
Schlussfolgerung
Obwohl lsof bietet eine Fülle von Optionen, die wir hier besprochen haben, sollten ausreichen, um Ihnen den Einstieg zu erleichtern. Wenn Sie damit fertig sind, gehen Sie zur Manpage des Tools, um mehr darüber zu erfahren. Oh, und falls Sie irgendwelche Zweifel und Fragen haben, schreiben Sie unten einen Kommentar.