Lsof: Monitoring Open Files & Ports (Artikel 270)
Beherrschung des lsof-Werkzeugs zur Identifizierung offener Dateien und Netzwerkverbindungen. Erfahren Sie, wie Sie blockierte Ressourcen finden und Sicherheits-Audits durchführen.
# Lsof Mastery: Alles ist eine Datei
TL;DR / Management Summary Das Unix-Dogma lautet: Everything is a file. Egal ob eine echte Textdatei, eine Netzwerkverbindung (Socket), eine Hardware-Komponente oder eine Pipe – für den Kernel ist es ein File Descriptor. lsof (List Open Files) ist das Fenster in dieses Universum. Ein Senior Admin nutzt
lsof, um zu sehen, welcher Prozess eine Partition blockiert, wer auf einem Port lauscht oder welche Dateien ein verdächtiger User gerade im Zugriff hat.
# 1. Einführung & Architektur
Der Blick auf die File Descriptors.
Jeder Prozess hat ein Verzeichnis unter /proc/<PID>/fd/. lsof aggregiert diese Informationen in einer lesbaren Form.
# Die Analyse-Szenarien (Mermaid)
graph TD
A[lsof command] --> B{What to find?}
B -->|Network| C[Ports: -i :80]
B -->|Process| D[Files by PID: -p 1234]
B -->|User| E[Files by User: -u admin]
B -->|Partition| F[Blockers: /mnt/data]
C/D/E/F --> G[Result: PID, User, Command, File Path]
# 2. Netzwerkanalyse: Wer hört zu?
Ersatz für netstat/ss.
# Alle offenen Netzwerkverbindungen
sudo lsof -i
# Spezifischen Port prüfen
sudo lsof -i :22
# Zeigt genau, welcher SSH-Prozess welche IP-Verbindung hält.
# 3. Datei-Management: Den Blocker finden
Unmount-Probleme lösen.
# Wer blockiert /mnt/data?
sudo lsof +D /mnt/data
# Findet alle Prozesse, die Dateien in diesem Pfad offen haben.
# In welche Dateien schreibt ein Prozess gerade?
sudo lsof -p 1234
# 4. Day-2 Operations: Security Audit
Sichtbarkeit von Aktivitäten.
# Welche Dateien nutzt der User ‘johndoe’?
sudo lsof -u johndoe
# Gelöschte Dateien finden, die Platz fressen
sudo lsof | grep "(deleted)"
# Ideal, um Prozesse zu finden, die gelöschte Log-Files offen halten.
# 5. Troubleshooting & “War Stories”
Wenn lsof zur Rettung eilt.
# Story 1: “Die unlöschbare Partition”
Symptom: umount /data schlägt fehl mit target is busy.
Ursache: Ein vergessener screen oder tmux Prozess hält eine Shell in diesem Verzeichnis offen.
Lösung: lsof +D /data zeigt die PID der Shell. Beenden Sie die Shell, und der Unmount funktioniert sofort.
# Story 2: “Das Port-Geheimnis”
Symptom: Der Webserver startet nicht, weil Port 80 angeblich belegt ist. ss zeigt den Port als LISTEN, verrät aber den Namen des Prozesses nicht.
Ursache: Ein verwaister Worker-Prozess oder ein Container-Proxy blockiert den Socket.
Lösung: sudo lsof -i :80. Das Tool zeigt Ihnen die PID. Oft ist es ein abgestürzter Vorgängerprozess, der nicht sauber aufgeräumt hat.
# 6. Fazit & Empfehlung
- Pflicht: Nutzen Sie das Flag
-n(No DNS) und-P(No Port Names), wenn das Netzwerk langsam ist. Es beschleunigtlsofmassiv. - Wahl: Nutzen Sie
lsoffür Datei-Probleme undssfür reine Netzwerk-Probleme. - Sicherheit: Ein regelmäßiger Check mit
lsof -ifindet oft unautorisierte Backdoor-Sockets.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Port suchen | lsof -i :<port> |
| IPv4 Verbindungen | lsof -i 4 |
| Alles von PID | lsof -p <pid> |
| Alles von User | lsof -u <user> |
| Blockierte Directory | lsof +D <path> |
| Nur PIDs ausgeben | lsof -t -i :80 (Ideal für scripts) |
| Keine Namen (schnell) | lsof -nP |
| Gelöschte Dateien | lsof +L1 |
| Bestimmte Datei | lsof /etc/passwd |
| Hilfe | lsof -h |