Linux-lsof-Befehl
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 -c nginx # Von allen nginx-Prozessen geöffnete Dateien anzeigen
3. Netzwerkverbindungen anzeigen
Beispiel
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 Arbeitsverzeichnistxt: Programmcode-Dateimem: Speicherzugeordnete Datei0u、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
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:
- Direktes Ausführen
lsofscannt das gesamte System und kann viele Ressourcen verbrauchen - Versuchen Sie, präzise Filterbedingungen zu verwenden (wie z. B.
-p、-u、-iusw.), um den Abfragebereich einzugrenzen - 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:
- fuser: Schnell anzeigen, welche Prozesse eine bestimmte Datei oder einen bestimmten Socket verwenden
- ss/netstat: Speziell für Netzwerkverbindungsinformationen
- 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:
- Ressourcenbelegungsprobleme schnell lokalisieren
- Datei- und netzwerkbezogene Probleme beheben
- Den Betriebszustand des Systems verstehen
- 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.
Andere Erweiterungen
Linux-Befehlsenzyklopädie