In Linux wird alles als Dateien betrachtet und in Verzeichnissen organisiert. lsof (List of Open File) zeigt eine Liste der geöffneten Dateien an. Es hilft hauptsächlich, die Informationen über den Prozess herauszufinden, der die Dateien geöffnet hat. Abgesehen von Dateien kann es ein Verzeichnis, eine spezielle Blockdatei, eine gemeinsam genutzte Bibliothek, eine spezielle Zeichendatei, eine reguläre Pipe, eine benannte Pipe, einen Internet-Socket, einen UNIX-Domain-Socket und viele andere auflisten.
In diesem Tutorial lernen wir den lsof-Befehl kennen unter Linux mit leicht verständlichen Beispielen .
lsof-Befehl
Der Befehl lsof ist standardmäßig in den meisten Linux-Distributionen verfügbar. Sehr häufig wird der lsof-Befehl verwendet, wenn wir eine Festplatte nicht aushängen können, dann hilft der lsof-Befehl, die geöffnete Datei und ihren Prozess zu finden, der sie verursacht.
Syntax:
lsof [options] [names]
Die obige Syntax listet alle Dateien auf, die von allen Prozessen im System geöffnet wurden.
1. Alle geöffneten Dateien auflisten
Um schnell eine Liste der geöffneten Dateien zu erhalten, geben Sie lsof ein. Es listet alle Dateien auf, die von den verschiedenen Prozessen des Systems geöffnet wurden.
$ lsof
Normalerweise wird die Ausgabe sehr lang sein, Sie verwenden $ sudo lsof | more
, wenn Sie den Inhalt bildschirmweise anzeigen möchten.
2. Offene Dateien nach Benutzernamen auflisten
lsof hat einen Befehl, der verwendet werden kann, um eine Liste bestimmter Dateien zu finden, die von einem bestimmten Benutzer geöffnet werden.
Um geöffnete Dateien nach einem Benutzernamen aufzulisten Verwenden Sie den folgenden Befehl:
$ lsof -u bobbin
Verwenden Sie für mehrere Benutzer die folgende Syntax:
$ lsof -u [username1] -u [username2]
ODER
$ lsof -u [username1], [username2]
So listen Sie geöffnete Dateien mit Ausnahme bestimmter Benutzer auf:
$ lsof -u ^root
Um nur die Prozess-ID aufzulisten, verwenden Sie -t
Option.
$ lsof -t -u sonar
Dies ist hilfreich, falls Sie alle Prozesse beenden müssen, die sich auf eine bestimmte Verwendung beziehen.
$ kill -9 lsof -t -u sonar
3. Offene Dateien nach Prozess auflisten
lsof kann auch verwendet werden, um Dateien aufzulisten, die von einem bestimmten Prozess geöffnet wurden, indem -c
verwendet wird Option gefolgt vom Prozessnamen.
Zum Beispiel, um alle geöffneten Dateien per ssh aufzulisten:
$ lsof -c ssh
4. Offene Dateien nach Dateinamen auflisten
Wir können den Dateinamen als Argument angeben, um alle Prozesse aufzulisten, die eine bestimmte Datei geöffnet haben.
Geben Sie Folgendes ein, um alle Prozesse aufzulisten, die von der Datei /var/log/messages geöffnet wurden:
$ lsof /var/log/messages
5. Offene Dateien nach Prozess-ID
auflistenJeder Datei wird eine Prozess-ID zugewiesen. Ein einzelner Prozess kann eine große Anzahl von Dateien öffnen. Wir können den Befehl lsof verwenden, um alle geöffneten Dateien für eine bestimmte Prozess-ID aufzulisten.
Geben Sie beispielsweise Folgendes ein, um geöffnete Dateien mit der Prozess-ID 2 aufzulisten:
$ lsof -p 2
Falls Sie offene Dateien für mehrere Prozess-IDs auflisten möchten, geben Sie
ein$ lsof -p 2,3
Ein System enthält eine große Anzahl von Prozessen, von denen jeder Dateien zur Verwendung geöffnet hat. Ein Prozess kann viele untergeordnete Prozesse haben, und dieser Prozess wird auch als übergeordneter Prozess bezeichnet.
Der Befehl lsof wird mit -R
verwendet Option, um eine Liste der Dateien zu erhalten, die von PPID (Parent Process IDentification) geöffnet wurden.
$ lsof -R
Sie können aus der Ausgabe in der 5. Spalte die PPID der geöffneten Dateien anzeigen.
Geben Sie Folgendes ein, um die PPID für eine bestimmte PID zu finden:
$ lsof -p [PID] -R
6. Offene Dateien in einem Verzeichnis auflisten
Um die geöffneten Dateien in einem bestimmten Verzeichnis aufzulisten, können wir den Befehl lsof verwenden.
Verwenden Sie +d
Option, um eine Liste der geöffneten Dateien im angegebenen Verzeichnis anzuzeigen, sie geht jedoch nicht in Unterverzeichnisse.
Das folgende Beispiel durchsucht offene Dateien im Verzeichnis /var/log:
$ lsof +d /var/log
Die Option +D befiehlt lsof, die gesamte Tiefe des Verzeichnisses nach allen offenen Instanzen sowie allen darin enthaltenen Dateien und Verzeichnissen zu durchsuchen.
In diesem Fall sucht lsof nach offenen Dateien in /var/log und seinen Unterverzeichnissen:
$ lsof +D /var/log
7. Offene Dateien mit Netzwerkprotokoll auflisten
Ein System kann für verschiedene Zwecke mit verschiedenen Netzwerken verbunden werden. Alles in Linux ist eine Datei, wir können die Dateien untersuchen, die von einer Netzwerkverbindung im System geöffnet werden.
Um die geöffneten Dateien im TCP-Protokoll aufzulisten, können wir den folgenden Befehl ausführen.
$ lsof -i TCP
Um die geöffneten Dateien im UDP-Protokoll aufzulisten, können wir den folgenden Befehl ausführen.
$ sudo lsof -i UDP
8. Offene Dateien nach Portnummer auflisten
lsof hat einen Befehl, der speziell die offenen Dateien auf einer bestimmten Portnummer auflistet, um alle Prozesse aufzulisten, die auf diesem Port laufen.
Zum Beispiel, um offene Dateien auf Portnummer 443 aufzulisten
$ lsof -i :443
Sie können offene Dateien für mehrere Portnummern wie folgt auflisten:
$ lsof -i :80,443
Sie können auch geöffnete TCP- oder UDP-Dateien nach Portbereichen auflisten.
$ lsof -i TCP:1-49151
9. Offene Dateien nach IPv4/IPv6 auflisten
Es gibt eine Option in lsof, um geöffnete IPv4- oder IPv6-Netzwerkdateien aufzulisten.
Um geöffnete IPv4-Dateien anzuzeigen, geben Sie
ein$ lsof -i4
Die folgende Syntax kann verwendet werden, um offene IPv6-Dateien anzuzeigen:
$ lsof -i6
10. lsof kontinuierlich ausführen
Der Wiederholungsmodus ermöglicht es lsof, Aktualisierungen mit festgelegten Verzögerungen kontinuierlich zu wiederholen. Der Wiederholungsmodus kann mit der Option „-r“ oder „+r“ aktiviert werden, wobei „+r“ endet, wenn keine geöffneten Dateien gefunden werden, und „-r“ weiter auflistet, bis eine manuelle Unterbrechung eingeleitet wird. Jede Verzögerungszyklusausgabe wird durch die Verwendung von „========“ getrennt.
Syntax:
$ lsof [options] -r/+r[time-interval]
Zum Beispiel:
$ lsof -u sonar -r5
lsof-Befehlskopfzeilen
Die lsof
hat verschiedene Spalten.
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME
Der Name des dem Prozess zugeordneten UNIX-Befehls wird in COMMAND
gespeichert Säule.
Die PID
zeigt die Prozess-ID des Befehls an.
Der USER
zeigt den Namen des Benutzers an, der dem folgenden Prozess zugeordnet ist.
Die TID
zeigt die Task-ID.
Der FD
ist ein Dateideskriptor, der Abkürzungen wie cwd (aktuelles Arbeitsverzeichnis), txt (Textdateien), mem (speicherabgebildete Datei), rtd (Stammverzeichnis) und viele andere enthält.
TYPE
ist eine Abkürzung für einen bestimmten Dateityp, z. B. REG (reguläre Datei), DIR (Verzeichnis), CHR (spezielle Zeichendatei) usw.
Das DEVICE
enthält die Gerätenummern.
Der SIZE/OFF
enthält die Dateigröße oder den Datei-Offset in Bytes.
Der NODE
Spaltenwert repräsentiert die Knotennummer einer lokalen Datei.
Der NAME
zeigt den Namen des Einhängepunkts und des Dateisystems der Datei sowie die Internetadresse an.
Schlussfolgerung
In diesem Tutorial haben wir den Befehl lsof und seine Verwendung anhand von Beispielen kennengelernt. lsof bietet eine Reihe von Optionen zum Anpassen der Ausgabe an Ihre Anforderungen. Es ermöglicht Ihnen, einfach und schnell mehrere Argumente zu kombinieren, um die erforderliche Ausgabe zu erhalten.