lsof

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Ein Terminal öffnen

Inhaltsverzeichnis
  1. Installation
  2. Benutzung
  3. Beispiele
  4. Graphische Oberfläche
  5. Links

Wiki/Icons/terminal.png 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.

Installation

lsof ist normalerweise in der Standardinstallation enthalten, kann aber ansonsten über das Paket

installiert werden [1].

Benutzung

Der Aufruf von lsof erfolgt im Terminal [2] mit folgendem Befehl:

lsof [Option] <Format> 

Hinweis:

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.

Beispiele

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.

Graphische Oberfläche

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.