Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
lsof steht für list open files und ist ein Hilfsprogramm, welches Informationen über geöffnete Dateien liefert. Dies hört sich im ersten Moment unspektakulär an, jedoch sollte man dabei bedenken, dass unter unixartigen Betriebssystemen, also auch (Ubuntu) Linux, alles eine Datei ist. So werden auch Blockgeräte (=Laufwerke), Netzwerkports usw. über Dateien angesprochen. D.h. lsof kann ein sehr mächtiges Tool zur Überwachung und Analyse des Systems sein.
lsof ist normalerweise in der Standardinstallation enthalten, kann aber ansonsten über das Paket
lsof
installiert werden [1].
Der Aufruf von lsof erfolgt im Terminal [2] mit folgendem Befehl:
lsof [Option] <Format>
Ruft man lsof mit Root-Rechten auf, so erhält man Informationen über die verwendeten Dateien von allen Benutzern.
Der Aufruf ohne Optionen und Formatangabe erzeugt eine sehr lange Ausgabe von offenen Dateien und ist daher nicht besonders sinnvoll oder hilfreich.
lsof kennt die folgenden Optionen:
Filteroptionen von lsof | |
Format | Beschreibung |
/Pfad/Datei | Informationen über die Verwendung der angegebenen Datei |
/dev/cdrom | Informationen über die Verwendung von z.B. dem CD-ROM-Laufwerk |
+D /home/benutzername | Informationen über die Verwendung von Dateien z.B. des Home-Verzeichnisses des Anwenders |
+p PID | Liefert die Informationen welche PID welche Datei benutzt |
-c Prozess Name | Liefert die Informationen welcher Prozess welche Datei benutzt |
-u Anwender Name | Liefert die Informationen welcher Anwender welche Datei benutzt |
-i TCP/UDP oder IP-Adresse oder Port-Nr. | Liefert die Informationen welcher Netzwerkdienst von welchem Anwender, PID usw. benutzt wird |
+L1 | Liefert die Informationen über bereits gelöschte Dateien |
-a | logische UND-Verknüpfung von Optionen; dies macht immer dann Sinn, wenn lsof mit zwei Optionen aufgerufen wird und beide angewendet werden sollen, da per Voreinstellung immer eine ODER-Verknüpfung angewendet wird. |
Weiterhin kennt lsof die folgenden Ausgabeoptionen:
Optionen von lsof | |
Option | Beschreibung |
-r Sekunden | Wiederholt die Ausgabe alle x Sekunden |
-n | Gibt IP-Adressen statt Hostnamen aus |
-l | Gibt die Benutzer-ID statt des Benutzernamens aus |
-P | Gibt Port-Nummern statt Service-Namen aus. |
-t | Gibt nur eine PID Liste aus |
-F | Gibt alle Ergebnisse in einer einzigen Spalte aus |
lsof kennt noch eine Reihe von weiteren Optionen, die man in den Manpages nachlesen kann.
Im Folgenden einige (einfache) Beispiele für die Nutzung von lsof:
Im ersten Beispiel zeigt lsof, welche Prozesse gerade alle die Bash (genau genommen die Datei /bin/bash) nutzen:
sudo lsof /bin/bash
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME bash 7190 jochen txt REG 8,6 702160 287787 /bin/bash
Im zweiten Beispiel werden alle Dateien angezeigt, die Root offen hält:
sudo lsof -u root
Da diese Liste recht lang ist, wird auf die Ausgabe des Ergebnisses hier verzichtet.
Möchte man alle offenen Dateien anzeigen, die nicht von Root sondern jedem anderen beliebigen Benutzer offen gehalten werden, dann erledigt dies der Befehl
sudo lsof -u ^root
Im dritten Beispiel werden alle Netzwerkports (=Netzwerkdateien) angezeigt, die vom Nutzer "www-data" offen gehalten werden:
sudo lsof -a -i -u www-data
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME apache2 5990 www-data 3u IPv6 15271 TCP *:www (LISTEN) apache2 5991 www-data 3u IPv6 15271 TCP *:www (LISTEN) apache2 5993 www-data 3u IPv6 15271 TCP *:www (LISTEN) apache2 5995 www-data 3u IPv6 15271 TCP *:www (LISTEN) apache2 5996 www-data 3u IPv6 15271 TCP *:www (LISTEN)
lsof kann auch bei der Rettung von versehentlich gelöschten Dateien hilfreich sein. Mehr zu diesem Thema findet man hier.
Ebenso kann lsof sehr gute Dienste leisten, wenn man die Vermutung hat, dass auf dem eigenen Rechner (Server) Dienste laufen, die nicht laufen sollen bzw. die man gar nicht selber aktiviert hat. Mehr Informationen hierzu findet man auf den Seiten, die unter Links aufgeführt sind.
Es gibt mit Glsof auch eine graphische Oberfläche für lsof. Diese wird aber unabhängig von lsof entwickelt und ist nicht offizieller Bestandteil. Glsof liegt noch nicht (Stand August 2008) in einer stabilen Version vor und wird eher langsam entwickelt.
Glsof gibt es nicht als fertiges Paket, man kann die aktuelle Version hier herunterladen; auf dieser Seite findet man auch eine Anleitung zum Selber-Kompilieren.
Weiterführende Links zum Thema lsof mit Beispielen
FAQ zu lsof vom Autor, sehr ausführlich
Viele Beispiele für den Einsatz von lsof
Diese Revision wurde am 18. März 2012 18:13 von aasche erstellt.