[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] [https://people.freebsd.org/~abe/ lsof] {en} steht für '''l'''i'''s'''t '''o'''pen '''f'''iles 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 folgendes das Paket installiert werden[1]. {{{#!vorlage Paketinstallation lsof }}} = Benutzung = Der Aufruf von lsof erfolgt im Terminal[2] mit folgendem Befehl: {{{#!vorlage Befehl lsof [Option] }}} {{{#!vorlage Hinweis Ruft man lsof mit [:mit Root-Rechten arbeiten: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: {{{#!vorlage Tabelle <-2 rowclass="titel">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/BENUTZER`` Informationen über die Verwendung von Dateien z.B. des Home-Verzeichnisses des Anwenders `BENUTZER` +++ ``+p PID`` Liefert die Informationen welche [wikipedia:Process_identifier:PID] welche Datei benutzt +++ ``-c PROZESSNAME`` Liefert die Informationen welcher Prozess welche Datei benutzt +++ ``-u ANWENDERNAME`` 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: {{{#!vorlage Tabelle <-2 rowclass="titel">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 [wikipedia:Process_identifier:PID] Liste aus +++ ``-F`` Gibt alle Ergebnisse in einer einzigen Spalte aus }}} lsof kennt noch eine Reihe von weiteren Optionen, die man in den [:man: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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 {{{#!vorlage Befehl sudo lsof -u ^root }}} Im dritten Beispiel werden alle Netzwerkports (=Netzwerkdateien) angezeigt, die vom Nutzer "www-data" offen gehalten werden: {{{#!vorlage Befehl 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 [:Datenrettung#Offene-Dateien: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 Links] aufgeführt sind. = Links = * [http://mikiwiki.org/wiki/lsof Weiterführende Links] zum Thema lsof mit Beispielen {de} * [https://www.jfranken.de/homepages/johannes/vortraege/lsof_inhalt.de.html Viele Beispiele] {de} für den Einsatz von lsof # tag: Shell, System, Hardware