lsof — offene Dateien und Netzwerk-Sockets aufspüren
Praxis-Guide zu lsof: offene Dateien, Ports und Sockets aufspüren – wer lauscht, was blockiert ein unmount, welche gelöschte Datei frisst Plattenplatz.
Unter Unix und Linux ist fast alles eine Datei – auch Netzwerkverbindungen, Pipes, Geräte und Verzeichnisse. lsof (List Open Files) macht genau diese offenen Dateien sichtbar und beantwortet damit Fragen, an denen andere Werkzeuge scheitern: Wer lauscht auf einem Port? Warum lässt sich ein Verzeichnis nicht aushängen? Welcher Prozess hält eine längst gelöschte Datei offen und frisst Plattenplatz? Dieser Guide führt dich von den Grundlagen bis zu kombinierten Filtern für den Alltag.
Grundlagen
lsof — Listet alle offenen Dateien aller Prozesse auf. Sehr lange Ausgabe.
sudo lsof | head -50lsof -p PID — Zeigt alle von einem bestimmten Prozess geöffneten Dateien.
lsof -p 1234lsof -c COMMAND — Zeigt Dateien von Prozessen, deren Name mit COMMAND beginnt.
lsof -c nginxlsof -u USER — Zeigt Dateien, die ein bestimmter Nutzer geöffnet hat.
lsof -u www-datalsof -u ^USER — Zeigt Dateien, die NICHT von einem Nutzer geöffnet wurden (Nutzer ausschließen).
lsof -u ^rootlsof +D DIRECTORY — Zeigt alle offenen Dateien in einem Verzeichnis (rekursiv).
lsof +D /var/loglsof +d DIRECTORY — Zeigt offene Dateien in einem Verzeichnis (nicht rekursiv).
lsof +d /tmplsof FILE — Zeigt, welche Prozesse eine bestimmte Datei geöffnet haben.
lsof /var/log/syslogNetzwerkverbindungen
lsof -i — Listet alle Netzwerkverbindungen auf (IPv4 und IPv6).
sudo lsof -ilsof -i :PORT — Zeigt, welcher Prozess einen bestimmten Port nutzt.
sudo lsof -i :80lsof -i tcp — Zeigt nur TCP-Verbindungen.
sudo lsof -i tcplsof -i udp — Zeigt nur UDP-Verbindungen.
sudo lsof -i udplsof -i 4 — Zeigt nur IPv4-Verbindungen.
sudo lsof -i 4lsof -i 6 — Zeigt nur IPv6-Verbindungen.
sudo lsof -i 6lsof -i tcp:PORT — Zeigt TCP-Verbindungen auf einem bestimmten Port.
sudo lsof -i tcp:443lsof -i @HOST — Zeigt Verbindungen zu/von einem bestimmten Host.
sudo lsof -i @192.168.1.1lsof -i @HOST:PORT — Zeigt Verbindungen zu einem bestimmten Host und Port.
sudo lsof -i @192.168.1.1:22lsof -i :PORT1-PORT2 — Zeigt Verbindungen über einen Portbereich.
sudo lsof -i :8000-9000Verbindungszustände
lsof -i -sTCP:LISTEN — Zeigt nur lauschende TCP-Sockets.
sudo lsof -i -sTCP:LISTENlsof -i -sTCP:ESTABLISHED — Zeigt nur aufgebaute TCP-Verbindungen.
sudo lsof -i -sTCP:ESTABLISHEDlsof -i -sTCP:CLOSE_WAIT — Zeigt Verbindungen im Zustand CLOSE_WAIT.
sudo lsof -i -sTCP:CLOSE_WAITlsof -i -sTCP:TIME_WAIT — Zeigt Verbindungen im Zustand TIME_WAIT.
sudo lsof -i -sTCP:TIME_WAITAnzeigeoptionen
lsof -n — Numerische Ausgabe – löst keine Hostnamen auf. Schneller.
sudo lsof -i -nlsof -P — Löst Portnummern nicht in Dienstnamen auf.
sudo lsof -i -Plsof -nP — Komplett numerisch – weder Hostnamen noch Ports auflösen.
sudo lsof -i -nPlsof -t — Knappe Ausgabe – nur PIDs. Praktisch für Skripte.
lsof -t -i :80lsof -r SECONDS — Wiederholt die Auflistung alle N Sekunden (wie watch).
sudo lsof -i :80 -r 2lsof +r SECONDS — Wiederholt, bis keine offenen Dateien mehr gefunden werden, dann Ende.
lsof +r 1 /path/to/fileFilter kombinieren
lsof -a -u USER -i — UND-Verknüpfung: Netzwerkverbindungen eines bestimmten Nutzers. -a bedeutet UND.
sudo lsof -a -u www-data -ilsof -a -c COMMAND -i :PORT — Dateien eines Kommandos UND auf einem bestimmten Port.
sudo lsof -a -c apache -i :80lsof -a -p PID -i — Netzwerkverbindungen eines bestimmten Prozesses.
lsof -a -p 1234 -iDateisystem & Geräte
lsof +f -- /MOUNT — Zeigt alle Prozesse, die Dateien auf einem eingehängten Dateisystem nutzen.
lsof +f -- /mnt/usblsof /dev/DEVICE — Zeigt Prozesse, die ein bestimmtes Gerät nutzen.
lsof /dev/sda1lsof -d FD — Zeigt Dateien nach Dateideskriptor-Nummer.
lsof -d 0-2lsof +L1 — Zeigt Dateien mit Link-Zähler null (gelöscht, aber noch offen).
sudo lsof +L1Praxisbeispiele
lsof -i -nP -sTCP:LISTEN — Zeigt alle lauschenden Ports mit numerischen Adressen. Häufigster Einsatz.
sudo lsof -i -nP -sTCP:LISTENkill -9 $(lsof -t -i :PORT) — Beendet den Prozess, der einen bestimmten Port nutzt.
kill -9 $(lsof -t -i :8080)lsof +L1 | awk '{sum += $7} END {print sum/1024/1024 " MB"}' — Berechnet den Plattenplatz gelöschter, aber noch offener Dateien.
sudo lsof +L1 | awk '{sum += $7} END {print sum/1024/1024 " MB"}'lsof -c java -a -i -nP — Zeigt alle Netzwerkverbindungen von Java-Prozessen.
sudo lsof -c java -a -i -nPlsof -u USER -a +D /home/USER — Zeigt alle Dateien, die ein Nutzer in seinem Home-Verzeichnis offen hat.
lsof -u jpk -a +D /home/jpklsof -i @REMOTE_HOST -nP — Findet alle Verbindungen zu einem bestimmten Remote-Host.
sudo lsof -i @10.0.0.5 -nP Fazit
lsof ist ein reines Lese-Kommando – es verändert nichts, sondern gibt nur Auskunft, und gehört damit zu den sichersten Diagnose-Werkzeugen überhaupt. Für die meisten Aufgaben reicht eine Handvoll Aufrufe: lsof -i :<port> zeigt, wer auf einem Port lauscht oder sich verbindet, lsof -p <pid> und lsof -u <user> grenzen auf Prozess oder Nutzer ein, und lsof +D <verzeichnis> verrät, welcher Prozess ein „device busy" beim Aushängen verursacht. Besonders wertvoll ist lsof +L1: Es findet gelöschte, aber noch offene Dateien, deren Speicher das System erst nach dem Schließen freigibt – die Brücke zu df und du, wenn die Platte voll ist, das Verzeichnis aber leer wirkt. Für Dateien fremder Prozesse brauchst du in der Regel sudo.
Weiterführende Links
- ubuntuusers-Wiki: lsof – deutschsprachige Einführung mit vielen Praxisbeispielen
- Wikipedia: lsof – Hintergrund und Überblick zum Werkzeug