Linux-lsof-Befehl

Linux 命令大全Linux-Befehlsenzyklopädie


Ein leistungsstarkes Kommandozeilenwerkzeug, mit dem alle geöffneten Dateien und zugehörige Prozessinformationen auf dem aktuellen System aufgelistet werden. In Linux bedeutet die Philosophie "Alles ist eine Datei", dass lsof nicht nur reguläre Dateien anzeigen kann, sondern auch Netzwerkverbindungen, Gerätedateien, Pipes, Sockets und mehr.


lsof-Basissyntax

lsof [选项] [文件名或目录]

Beschreibungen allgemeiner Optionsparameter

Option Beschreibung
-a UND-Logik zum Kombinieren mehrerer Bedingungen verwenden
-c <进程名> Vom angegebenen Prozess geöffnete Dateien anzeigen
-d <文件描述符> Dateien mit dem angegebenen Dateideskriptor anzeigen
-i Informationen zu Netzwerkverbindungen anzeigen
-n Hostnamen nicht auflösen (IP-Adressen anzeigen)
-P Portnamen nicht auflösen (Portnummern anzeigen)
-p <PID> Von der angegebenen Prozess-ID geöffnete Dateien anzeigen
-u <用户名> Von dem angegebenen Benutzer geöffnete Dateien anzeigen
+D <目录> Dateien, die unter dem Verzeichnis geöffnet wurden, rekursiv anzeigen
-t Nur Prozess-IDs ausgeben (für Skripting geeignet)

Beispiele für häufige Operationen

1. Alle geöffneten Dateien anzeigen

lsof

Dies listet alle im System geöffneten Dateien auf, einschließlich regulärer Dateien, Verzeichnisse, Bibliotheksdateien, Geräte, Netzwerkverbindungen und so weiter.

2. Von einem angegebenen Prozess geöffnete Dateien anzeigen

Beispiel

lsof -p 1234  # Dateien anzeigen, die vom Prozess mit PID 1234 geöffnet wurden
lsof -c nginx # Von allen nginx-Prozessen geöffnete Dateien anzeigen

3. Netzwerkverbindungen anzeigen

Beispiel

lsof -i      # Alle Netzwerkverbindungen anzeigen
lsof -i :80  # Alle Verbindungen anzeigen, die Port 80 verwenden
lsof -i TCP  # Alle TCP-Verbindungen anzeigen

4. Von einem Benutzer geöffnete Dateien anzeigen

lsof -u root  # 查看 root 用户打开的文件

5. Dateien finden, die gelöscht, aber noch von Prozessen belegt sind

lsof | grep deleted

Diese Situation tritt häufig auf, wenn Protokolldateien gelöscht werden, der Dienst aber noch läuft, sodass Speicherplatz nicht freigegeben wird.

6. Dateien anzeigen, die unter einem angegebenen Verzeichnis geöffnet sind

lsof +D /var/log  # 查看 /var/log 目录下被打开的文件

Erklärung der Ausgabefelder

Die typischen Spalten in der Ausgabe des lsof-Befehls sind wie folgt:

COMMAND    PID   USER   FD      TYPE     DEVICE  SIZE/OFF    NODE NAME
  • COMMAND: Prozessname
  • PID: Prozess-ID
  • USER: Benutzer, der den Prozess ausführt
  • FD: Dateideskriptor
    • cwd: Aktuelles Arbeitsverzeichnis
    • txt: Programmcode-Datei
    • mem: Speicherzugeordnete Datei
    • 0u、1u、2u: Standardeingabe, -ausgabe, -fehler
  • TYPE: Dateityp (REG reguläre Datei, DIR Verzeichnis, CHR Zeichengerät usw.)
  • DEVICE: Gerätenummer
  • SIZE/OFF: Dateigröße oder Offset
  • NODE: Inode-Nummer der Datei
  • NAME: Dateiname oder Einhängepunkt

Erweiterte Anwendungsfälle

1. Prozesse finden, die einen Port belegen

lsof -i :8080

Wenn Sie einen Dienst starten möchten, aber der Port bereits belegt ist, kann dieser Befehl schnell den Prozess finden, der den Port belegt.

2. Gelöschte Dateien wiederherstellen

Wenn eine Datei gelöscht wurde, aber noch von einem Prozess verwendet wird, kann sie über das /proc-Dateisystem wiederhergestellt werden:

Beispiel

lsof | grep deleted  # Die gelöschte Datei und den Prozess finden
ls -l /proc//fd  # Die Dateideskriptoren des Prozesses anzeigen
cp /proc//fd/ /path/to/recovery  # Die Datei wiederherstellen

3. Dateizugriff überwachen

watch -n 1 'lsof /path/to/file'

Hiermit kann in Echtzeit überwacht werden, welche Prozesse auf eine bestimmte Datei zugreifen.


Problemlösungen

1. Unzureichender Speicherplatz, aber keine großen Dateien auffindbar

lsof | grep deleted

Finden Sie Dateien, die gelöscht, aber noch von Prozessen belegt sind, und starten Sie dann die zugehörigen Prozesse neu, um Speicherplatz freizugeben.

2. Gerät kann nicht ausgehängt werden

lsof /mount/point

Finden Sie heraus, welche Prozesse den Einhängepunkt verwenden, beenden Sie diese Prozesse und hängen Sie ihn dann aus.

3. Fehlerbehebung bei Netzwerkverbindungsproblemen

lsof -i -n -P

Zeigen Sie alle Netzwerkverbindungen an, um Portkonflikte oder Verbindungsprobleme zu beheben.


Leistungsüberlegungen

Obwohl lsof leistungsstark ist, müssen Sie vorsichtig sein, wenn Sie es in einer stark ausgelasteten Produktionsumgebung verwenden:

  1. Direktes Ausführenlsofscannt das gesamte System und kann viele Ressourcen verbrauchen
  2. Versuchen Sie, präzise Filterbedingungen zu verwenden (wie z. B.-p、-u、-iusw.), um den Abfragebereich einzugrenzen
  3. Wenn Sie es in Skripten verwenden,-tdie Option gibt nur PID aus, wodurch der Parsing-Aufwand reduziert wird.

Alternative Tools

Obwohl lsof das am häufigsten verwendete Werkzeug ist, können in bestimmten Szenarien einige Alternativen in Betracht gezogen werden:

  1. fuser: Schnell anzeigen, welche Prozesse eine bestimmte Datei oder einen bestimmten Socket verwenden
  2. ss/netstat: Speziell für Netzwerkverbindungsinformationen
  3. ps: kombiniert mit/procdem Dateisystem lassen sich ebenfalls einige Informationen gewinnen.

Zusammenfassung

lsof ist das Schweizer Taschenmesser für Linux-Systemadministratoren und Entwickler. Wenn Sie es beherrschen, kann es Ihnen helfen:

  1. Ressourcenbelegungsprobleme schnell lokalisieren
  2. Datei- und netzwerkbezogene Probleme beheben
  3. Den Betriebszustand des Systems verstehen
  4. Verschiedene "Datei wird verwendet"-Probleme lösen

Es wird empfohlen, in der täglichen Arbeit mehr zu üben, die verschiedenen Optionsparameter je nach konkreten Szenarien flexibel einzusetzen und nach und nach das volle Potenzial dieses leistungsstarken Werkzeugs zu beherrschen.


Linux 命令大全Linux-Befehlsenzyklopädie

Andere Erweiterungen