Übersicht
Probleme wie „Portkonflikte“ oder „Festplattenspeicher, der trotz Löschens nicht freigegeben wird“, die beim Betrieb von Linux-Systemen auftreten, lassen sich mit dem Befehl lsof sofort lösen. In diesem Artikel behandeln wir wichtige praxisnahe Techniken zur Anwendung von lsof in der Linux-Umgebung, in der alles als Datei verwaltet wird. Schritt für Schritt lernen Sie das unverzichtbare Troubleshooting-Know-how für Systemadministratoren kennen – von der Port-Rückverfolgung bis zum Lösen von Dateisperren.
Grundlegende Überprüfung mit lsof und Ermitteln geöffneter Dateien bestimmter Benutzer/Prozesse
Um zu überprüfen, ob der Befehl lsof auf dem System installiert ist, und das Paket zu installieren, falls es fehlt, führen Sie den Befehl command -v lsof >/dev/null 2>&1 || (apt-get update -qq && apt-get install -y lsof) aus.

Führen Sie den Befehl lsof -v aus, um die installierte Version und Build-Informationen des lsof-Befehls zu überprüfen.
⚙️ [Wichtige Optionen]
-u : Zeigt Dateien und Prozesse an, die von einem bestimmten Benutzerkonto geöffnet wurden.-c : Filtert nach Dateien, die von Prozessen geöffnet wurden, deren Name mit dem angegebenen Begriff beginnt.-p : Überprüft die Liste der Dateien, die von einer bestimmten Prozess-ID (PID) geöffnet wurden.-i : Ermittelt Netzwerk-Sockets und Prozesse, die bestimmte Ports verwenden.+D : Sucht rekursiv nach geöffneten Dateien im angegebenen Verzeichnis und dessen Unterpfaden.-t : Gibt ausschließlich Prozess-IDs (PIDs) zeilenweise aus, ideal zur Verwendung in Skripten.

Um ein Testverzeichnis und eine Beispieldatei für die lsof-Übung vorzubereiten, führen Sie den Befehl mkdir -p /tmp/lsof_lab && echo '테스트 파일 내용' > /tmp/lsof_lab/sample.txt aus.

Führen Sie den Befehl tail -f /tmp/lsof_lab/sample.txt & aus, um die erstellte Beispieldatei im Hintergrund offenzuhalten und zu überwachen.

Der Befehl lsof -u $(whoami) | head -n 15 ruft die ersten 15 Zeilen der Dateien ab, die von den Prozessen des aktuell angemeldeten Benutzers belegt sind.
Sie können detaillierte Informationen über die vom aktuellen Benutzer geöffneten Dateien einsehen, darunter grundlegende Systembibliotheken und Binärdateien.

Der Befehl lsof -c tail durchsucht und listet Dateien sowie Bibliotheken auf, die von Prozessen mit dem Namen tail geöffnet wurden.
Damit lässt sich nachvollziehen, welche Dateideskriptoren und Shared Libraries der im Hintergrund ausgeführte tail-Befehl referenziert.

Führen Sie den Befehl killall tail 2>/dev/null || true aus, um den im Hintergrund laufenden tail-Prozess nach Abschluss der Übung sicher zu beenden und aufzuräumen.

Überprüfung von Netzwerkports und Behebung von Prozesskonflikten
Um die Umgebung für die Portprüfung und das Troubleshooting von Prozesskonflikten einzurichten, prüfen Sie, ob python3 auf dem System installiert ist, und installieren Sie das Paket, falls erforderlich.

Starten Sie einen einfachen Webserver im Hintergrund auf Port 8080, um die Netzwerkport-Belegung zu testen.

Warten Sie 1 Sekunde, bis der im Hintergrund gestartete Webserver-Prozess ordnungsgemäß an Port 8080 gebunden ist.

Der Befehl lsof -i :8080 ermittelt den Prozess, der den Port 8080 verwendet.
Anhand der Ausgabe lässt sich erkennen, dass der python3-Prozess mit der PID 371 auf Port 8080 im Status LISTEN lauscht.

Der Befehl lsof -i -P -n | head -n 15 gibt die Netzwerk-Sockets des Systems schnell in numerischer Form aus, ohne Portnummern und IP-Adressen aufzulösen.
Da Reverse-DNS-Lookups und Portnamens-Zuordnungen übersprungen werden, lässt sich die Portbelegung ohne Verzögerungen ermitteln.

Der Befehl lsof -i TCP:8080 -sTCP:LISTEN filtert gezielt nach Verbindungen auf Port 8080 mit dem TCP-Protokoll im Zustand LISTEN.
Dies ist nützlich, um unnötige Sitzungsverbindungen auszuschließen und genau den Daemon-Prozess zu identifizieren, der auf eingehende Verbindungen an diesem Port wartet.

Nach Abschluss der Übung beenden Sie den Webserver-Hintergrundprozess, der den TCP-Port 8080 belegte, um die Systemressourcen wieder freizugeben.

Aufspüren bestimmter Verzeichnisse und Dateien, die das Unmounten blockieren (Device Busy)
Erstellen Sie ein Übungsverzeichnis und wechseln Sie dorthin, um die Belegung eines Verzeichnisses und eine Blockierung beim Unmounten nachzustellen.

Führen Sie den Befehl echo '작업 중인 파일' > active_work.log aus, um eine Protokolldatei zu erstellen, auf die der Prozess zugreifen soll.

Führen Sie im Hintergrund einen sleep-Prozess aus, der die erstellte Datei über die Standardeingabe referenziert und dauerhaft geöffnet hält.

Wechseln Sie in das Home-Verzeichnis, um den Status von außerhalb des belegten Verzeichnisses zu überprüfen.

Der Befehl lsof +D /tmp/mount_test verfolgt und listet alle geöffneten Dateien und Prozesse im angegebenen Verzeichnis sowie dessen Unterpfaden rekursiv auf.
Die Ausgabe zeigt, dass der sleep-Prozess mit PID 450 das Verzeichnis als aktuelles Arbeitsverzeichnis (cwd) verwendet und die Datei active_work.log im Lesemodus (0r) geöffnet hält, was die Ursache für das Verhindern des Unmountens ist.

Beenden Sie nach Abschluss der Übung den sleep-Hintergrundprozess, der das Verzeichnis und die Datei belegt hat.

Löschen Sie das temporäre Testverzeichnis und alle darin enthaltenen Dateien, um die Systemressourcen zu bereinigen.

Wiederherstellen und Bereinigen von gelöschten Geisterdateien (deleted), die Festplattenspeicher belegen
Erstellen Sie ein Übungsverzeichnis und eine 10 MB große Testdatei, um einen Speicherplatzverlust zu simulieren.

Starten Sie einen Prozess im Hintergrund, der das Datei-Handle für die erstellte Datei geöffnet hält.

Löschen Sie die belegte Datei im Dateisystem, um den Zustand einer nicht freigegebenen Geisterdatei nachzustellen.

Der Befehl lsof | grep '(deleted)' | head -n 5' ruft eine Liste von Dateien ab, die im Dateisystem gelöscht wurden, aber von Prozessen weiterhin geöffnet gehalten werden und Speicherplatz belegen.
Damit lassen sich Geisterdateien und die zugehörigen Prozesse schnell ermitteln, wenn der Speicherplatz trotz Ausführung des rm-Befehls nicht freigegeben wird.

Anhand der mit lsof -t ermittelten Prozess-ID wird die Liste der Dateideskriptoren im Verzeichnis /proc/$TARGET_PID/fd/ abgefragt.
Durch die direkte Identifizierung der Dateideskriptornummer, die der Prozess referenziert, kann der Speicherplatz freigegeben werden, ohne den Prozess neu starten zu müssen, oder bei Bedarf können die gelöschten Originaldaten über diesen Deskriptor wiederhergestellt werden.
![TARGET_PID=$(lsof -t /tmp/leak_test/large.img 2>/dev/null | head -n 1) && [ -n “$TARGET_PID” ] && ls -l /proc/$TARGET_PID/fd/ || true](/ubuntu/20261007_150808_104/captures/s04_c05_TARGET_PID___lsof_-t__tmp_leak_test_large_img_2__d.png)
Beenden Sie nach Abschluss der Übung den Hintergrundprozess, der die Geisterdatei noch geöffnet hielt, um den Festplattenspeicher vollständig freizugeben.

Löschen Sie das temporäre Testverzeichnis vollständig, um die Systemressourcen zu bereinigen.

In diesem Leitfaden haben wir wichtige Praxistipps zur Verwendung des lsof-Befehls behandelt – von der Behebung von Portkonflikten bis hin zur Freigabe von Festplattenspeicher durch gelöschte Dateien.
Wir hoffen, dass diese Übersicht Ihnen beim Betrieb realer Server und bei der Fehlerbehebung hilfreich zur Seite steht.