Das „lsof“ Kommando in Linux ist eines der vielen eingebauten Werkzeuge, das sehr nützlich ist, um die „Liste der offenen Dateien“ zu überprüfen. Ja, der Begriff „lsof“ ist die Abkürzung für die Aufgabe.
Es gibt eine Reihe von Prozessen, die ständig im System laufen und auf verschiedene Dateien des Systems zugreifen. Bei diesen Dateien kann es sich um Festplattendateien, Skripte, Netzwerk-Sockets, Geräte, benannte Pipes und andere handeln. Mit „lsof“ ist es möglich, eine Menge Dinge zu tun, wie z.B. Debugging. Es ist auch sehr nützlich für Systemadministratoren, um herauszufinden, auf welche Dateien von welchen Prozessen zugegriffen wird. Eines der nützlichsten Szenarien, die ich gefunden habe, ist, wenn man dabei ist, ein Dateisystem auszuhängen, aber immer noch darauf zugegriffen wird.
Lassen Sie uns ohne Umschweife mit „lsof“ loslegen! Ich gehe davon aus, dass auf Ihrem aktuellen UNIX/Linux-System bereits „lsof“ installiert ist.
Dies meldet den vollständigen Pfad des Befehls, in diesem Fall „lsof“.
lsof -v
Dies meldet ausführliche Versionsinformationen von „lsof“, einschließlich des Build-Datums der Binärdatei, der Compiler-Version, der Compiler-Flags und anderer.
Basic „lsof“ usage
Run „lsof“ by itself.
This reports a BIG list of all the files that are being accessed by the system at the moment of running the command.
Während alle Felder selbsterklärend sind, sind die meisten verwirrt über die Spalten „FD“ und „TYPE“ und ihre Werte. Schauen wir sie uns an.
FD: Abkürzung für „File Descriptor“. Es werden die folgenden Werte angezeigt.
- cwd: Aktuelles Arbeitsverzeichnis
- rtd: Wurzelverzeichnis
- txt: Programmtext (Daten, Code, und andere)
- mem: Memory-mapped file
- err: FD-Informationsfehler
- mmap: Memory-mapped device
- ltx: Gemeinsamer Bibliothekstext (Daten und Code)
- m86: DOS Merge mapped file
Es gibt auch andere Werte, die Sie in der Spalte bemerken werden, wie „1u“ gefolgt von u, r, w, etc. Was bedeuten diese Werte?
- r: Lesezugriff
- w: Schreibzugriff
- u: Lese- und Schreibzugriff
- – : Unbekannter Modus und es enthält ein Sperrzeichen
- ‚ ‚: Modus ist unbekannt und es gibt kein Sperrzeichen
TYPE: Beschreibt den Dateityp und seine Kennung. Die Werte sind wie folgt:
- DIR: Verzeichnis
- CHR: Zeichenspezifische Datei
- REG: Reguläre Datei
- FIFO: First in, first out
Benutzerspezifisch geöffnete Dateien
Linux ist eine hervorragende Mehrbenutzerplattform. Mehrere Benutzer können gleichzeitig auf das System zugreifen und Operationen durchführen, für die sie eine Berechtigung haben.
Um die Dateien zu überprüfen, auf die ein bestimmter Benutzer zugreift, führen Sie den folgenden Befehl aus.
Für das Auschecken der Benutzer mit höherem Rang benötigt „lsof“ jedoch die Berechtigung „Superuser“.
Wie wäre es, alle Befehle und Dateien zu überprüfen, auf die ein bestimmter Benutzer zugreift? Führen Sie das folgende aus.
Auch für Benutzer mit höherem Rang benötigt „lsof“ das „Superuser“-Recht.
Port-spezifische laufende Prozesse
Um alle Prozesse herauszufinden, die gerade einen bestimmten Port benutzen, rufen Sie „lsof“ mit dem „-i“-Flag auf, gefolgt von den Protokoll- und Portinformationen.
:<service|port>
Um beispielsweise alle Programme zu ermitteln, die derzeit auf Port 80 über das TCP/IP-Protokoll zugreifen, führen Sie den folgenden Befehl aus.
Diese Methode kann auch verwendet werden, um alle Prozesse anzuzeigen, die Ports innerhalb eines bestimmten Bereichs verwenden, zum Beispiel 1 bis 1000. Die Befehlsstruktur ist ähnlich wie zuvor, mit einem kleinen Zauber bei der Portnummer.
Protokollspezifische Prozesse
Hier sind 2 Beispiele, die die Prozesse zeigen, die derzeit die Protokolle IPv4 und IPv6 verwenden.
Netzwerkverbindungen auflisten
Der folgende Befehl zeigt alle Netzwerkverbindungen des aktuellen Systems an.
Ausschluss mit ^
Ja, wir können bestimmte Benutzer, Ports, FD und andere mit dem Zeichen „^“ ausschließen. Man muss es nur mit Vorsicht verwenden, damit man nicht die gesamte Ausgabe durcheinanderbringt.
In diesem Beispiel wollen wir alle Prozesse des Benutzers „root“ ausschließen.
Es gibt noch andere Möglichkeiten, diesen Ausschlussmechanismus mit „lsof“ zu benutzen, zum Beispiel mit den Flags wie „-c“, „-d“ usw. Nicht alle Flags unterstützen diesen Mechanismus. Deshalb empfehle ich, eine Demo mit dieser Methode mit einem beliebigen Flag auszuprobieren, bevor man sie in einige Skripte implementiert.
PID-Suche
PID ist eine wichtige Eigenschaft jedes laufenden Prozesses im System. Sie ermöglicht eine genauere Eingrenzung auf einen bestimmten Prozess. Der Prozessname ist in vielen Situationen nicht sehr hilfreich, da die gleiche Binärdatei Kopien von sich selbst erstellen und verschiedene Aufgaben parallel ausführen kann.
Wenn Sie nicht wissen, wie Sie die PID eines Prozesses erhalten, verwenden Sie einfach „ps“, um alle laufenden Prozesse aufzulisten und filtern Sie die Ausgabe mit „grep“ mit dem Prozessnamen und/oder den Befehlen.
Nun führen Sie die Filterung mit „grep“ durch.
Nun überprüfen Sie, auf welche Dateien diese PID zugreift.
Auflisten offener Dateien für ein bestimmtes Gerät
Die Funktionalität von „lsof“ ist nicht nur auf diese Funktionen beschränkt. Sie können das Ergebnis von „lsof“ auch auf Gerätebasis filtern. Zu diesem Zweck sieht der Befehl etwa so aus.
Dieser Befehl ist super nützlich, um alle laufenden Prozesse mit ihren Besitzerinformationen herauszufinden, die auf ein bestimmtes Dateisystem zugreifen. Wenn du Probleme beim Aushängen eines Dateisystems hast, ist dies die beste Lösung.
Liste der geöffneten Dateien unter einem Verzeichnis
Ähnlich wie im vorherigen Beispiel, übergib einfach den Verzeichnispfad an „lsof“, um herauszufinden, ob irgendein Prozess darauf zugreift.
Hinweis: „lsof“ prüft das Verzeichnis rekursiv, daher kann es einige Zeit dauern.
Bonus: Beende alle Benutzeraktivitäten
Seien Sie extrem vorsichtig mit diesem Teil, da er einfach alles durcheinanderbringen kann, was ein Benutzer gerade tut. Der folgende Befehl wird alle laufenden Prozesse eines Benutzers beenden.
Abschließende Gedanken
Die Funktionen von „lsof“ hören hier nicht einfach auf. Die hier erwähnten sind diejenigen, die wir im Alltag am meisten brauchen werden. Es gibt noch viele andere Funktionen von „lsof“, die nützlich sein können (natürlich nur in bestimmten Fällen).
Für alle verfügbaren Funktionen und ihre Verwendung, sehen Sie sich die man- und Info-Seiten von „lsof“ an.
Freude!