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 -50

lsof -p PID — Zeigt alle von einem bestimmten Prozess geöffneten Dateien.

lsof -p 1234

lsof -c COMMAND — Zeigt Dateien von Prozessen, deren Name mit COMMAND beginnt.

lsof -c nginx

lsof -u USER — Zeigt Dateien, die ein bestimmter Nutzer geöffnet hat.

lsof -u www-data

lsof -u ^USER — Zeigt Dateien, die NICHT von einem Nutzer geöffnet wurden (Nutzer ausschließen).

lsof -u ^root

lsof +D DIRECTORY — Zeigt alle offenen Dateien in einem Verzeichnis (rekursiv).

lsof +D /var/log

lsof +d DIRECTORY — Zeigt offene Dateien in einem Verzeichnis (nicht rekursiv).

lsof +d /tmp

lsof FILE — Zeigt, welche Prozesse eine bestimmte Datei geöffnet haben.

lsof /var/log/syslog

Netzwerkverbindungen

lsof -i — Listet alle Netzwerkverbindungen auf (IPv4 und IPv6).

sudo lsof -i

lsof -i :PORT — Zeigt, welcher Prozess einen bestimmten Port nutzt.

sudo lsof -i :80

lsof -i tcp — Zeigt nur TCP-Verbindungen.

sudo lsof -i tcp

lsof -i udp — Zeigt nur UDP-Verbindungen.

sudo lsof -i udp

lsof -i 4 — Zeigt nur IPv4-Verbindungen.

sudo lsof -i 4

lsof -i 6 — Zeigt nur IPv6-Verbindungen.

sudo lsof -i 6

lsof -i tcp:PORT — Zeigt TCP-Verbindungen auf einem bestimmten Port.

sudo lsof -i tcp:443

lsof -i @HOST — Zeigt Verbindungen zu/von einem bestimmten Host.

sudo lsof -i @192.168.1.1

lsof -i @HOST:PORT — Zeigt Verbindungen zu einem bestimmten Host und Port.

sudo lsof -i @192.168.1.1:22

lsof -i :PORT1-PORT2 — Zeigt Verbindungen über einen Portbereich.

sudo lsof -i :8000-9000

Verbindungszustände

lsof -i -sTCP:LISTEN — Zeigt nur lauschende TCP-Sockets.

sudo lsof -i -sTCP:LISTEN

lsof -i -sTCP:ESTABLISHED — Zeigt nur aufgebaute TCP-Verbindungen.

sudo lsof -i -sTCP:ESTABLISHED

lsof -i -sTCP:CLOSE_WAIT — Zeigt Verbindungen im Zustand CLOSE_WAIT.

sudo lsof -i -sTCP:CLOSE_WAIT

lsof -i -sTCP:TIME_WAIT — Zeigt Verbindungen im Zustand TIME_WAIT.

sudo lsof -i -sTCP:TIME_WAIT

Anzeigeoptionen

lsof -n — Numerische Ausgabe – löst keine Hostnamen auf. Schneller.

sudo lsof -i -n

lsof -P — Löst Portnummern nicht in Dienstnamen auf.

sudo lsof -i -P

lsof -nP — Komplett numerisch – weder Hostnamen noch Ports auflösen.

sudo lsof -i -nP

lsof -t — Knappe Ausgabe – nur PIDs. Praktisch für Skripte.

lsof -t -i :80

lsof -r SECONDS — Wiederholt die Auflistung alle N Sekunden (wie watch).

sudo lsof -i :80 -r 2

lsof +r SECONDS — Wiederholt, bis keine offenen Dateien mehr gefunden werden, dann Ende.

lsof +r 1 /path/to/file

Filter kombinieren

lsof -a -u USER -i — UND-Verknüpfung: Netzwerkverbindungen eines bestimmten Nutzers. -a bedeutet UND.

sudo lsof -a -u www-data -i

lsof -a -c COMMAND -i :PORT — Dateien eines Kommandos UND auf einem bestimmten Port.

sudo lsof -a -c apache -i :80

lsof -a -p PID -i — Netzwerkverbindungen eines bestimmten Prozesses.

lsof -a -p 1234 -i

Dateisystem & Geräte

lsof +f -- /MOUNT — Zeigt alle Prozesse, die Dateien auf einem eingehängten Dateisystem nutzen.

lsof +f -- /mnt/usb

lsof /dev/DEVICE — Zeigt Prozesse, die ein bestimmtes Gerät nutzen.

lsof /dev/sda1

lsof -d FD — Zeigt Dateien nach Dateideskriptor-Nummer.

lsof -d 0-2

lsof +L1 — Zeigt Dateien mit Link-Zähler null (gelöscht, aber noch offen).

sudo lsof +L1

Praxisbeispiele

lsof -i -nP -sTCP:LISTEN — Zeigt alle lauschenden Ports mit numerischen Adressen. Häufigster Einsatz.

sudo lsof -i -nP -sTCP:LISTEN

kill -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 -nP

lsof -u USER -a +D /home/USER — Zeigt alle Dateien, die ein Nutzer in seinem Home-Verzeichnis offen hat.

lsof -u jpk -a +D /home/jpk

lsof -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.

Verwandte Kommandos

  • ps – laufende Prozesse und ihre PIDs anzeigen
  • kill – Prozesse über ihre PID beenden oder Signale senden
  • strace – Systemaufrufe eines Prozesses live mitverfolgen