Linux lsof Kommando

, Author

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.

which lsof

Dies meldet den vollständigen Pfad des Befehls, in diesem Fall „lsof“.

„lsof“ Version
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.

lsof

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.

lsof -u <Benutzername>

Für das Auschecken der Benutzer mit höherem Rang benötigt „lsof“ jedoch die Berechtigung „Superuser“.

sudo lsof -u <Benutzername>

Wie wäre es, alle Befehle und Dateien zu überprüfen, auf die ein bestimmter Benutzer zugreift? Führen Sie das folgende aus.

lsof -i -u <Benutzername>

Auch für Benutzer mit höherem Rang benötigt „lsof“ das „Superuser“-Recht.

sudo lsof -i -u <Benutzername>

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.

lsof -i<46><protocol><@hostname|host_address>
:<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.

lsof -i TCP:80

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.

lsof -i TCP:1-1000

Protokollspezifische Prozesse

Hier sind 2 Beispiele, die die Prozesse zeigen, die derzeit die Protokolle IPv4 und IPv6 verwenden.

lsof -i 4

lsof -i 6

Netzwerkverbindungen auflisten

Der folgende Befehl zeigt alle Netzwerkverbindungen des aktuellen Systems an.

lsof -i

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.

lsof -u^root

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.

ps -A

Nun führen Sie die Filterung mit „grep“ durch.

ps -A | grep <process_or_command>

Nun überprüfen Sie, auf welche Dateien diese PID zugreift.

lsof -p <PID >

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.

lsof <device_mount_point>

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.

lsof <busy_device_mount_point>

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.

=lsof +D <Verzeichnispfad>

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.

sudo kill -9 `lsof -t -u <Benutzername`

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.

man lsof

info lsof

lsof -?

Freude!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.