Aus der Unix-Mottenkiste

Mit Lsof nach offenen Dateien fahnden – Teil 1

| Autor: Thomas Drilling

Drillings Open-Source-Eck
Drillings Open-Source-Eck (Bild: Thomas Drilling)

Das Tools lsof ist ein typischen Unix-Tool, das schon mehr Jahre auf den Buckel hat, als z. B. Linux selbst. Dennoch gehört das Tool wie grep, tail, less und Co zu den Klassikern, die man beim Troubleshooting immer mal wieder braucht

Während die Version 2 noch auf allen möglichen Unix-Varianten lief, ist Lsof v3 Linux-Systemen vorbehalten. Lsof steht für „LiSt Open Files“, war für Windows-Nutzer vielleicht auf dem ersten Blick nicht sonderlich spannend klingt.

Everything a File

Unix und Linux jedoch sind Betriebssysteme, deren Konzeption und Aufbau maßgeblich auf dem Datei-Konzept basiert, d. h. neben Text- und Binärdateien gibt es zahlreichen andere Datei-Typen, die wichtige Dateisystemfunktionalitäten wie Prozesse, Pipes oder Sockets auf Dateien abbilden. Durch Abfragen, Auslesen oder Weiterverarbeiten solcher Dateien gewinnen iX-Administratoren wichtige Erkenntnisse oder steuern wichtige Funktionen.

Getreu dem Unix-Motto „everything a file" im Folgenden ein paar auch heute noch nützliche Szenarien, bei denen Lsof wertvolle Dienste leistet:

1. Folgender Befehl findet alle offenen Files im angegeben Verzeichnis, samt Unterverzeichnissen:

lsof +D /var/log

2. Um einfach nur heraus zu finden, welcher Prozess Dateien geöffnet hat, genügt der Aufruf ohne Optionen im angegebenen Verzeichnis:

lsof /var/log/syslog

3. Möchte man wissen, welcher Prozess den angegeben Port nutzt, gibt man Folgendes ein:

lsof -i:139

4. Das Kommando lässt sich noch einmal nach TCP und UDP aufschlüsseln

nur TCP: lsof -i tcp:137
nur UDP: lsof -i udp:137

Interessanter ist es meist herausfinden zu können, für welche momentan geöffneten Dateien ein bestimmtes laufendes Programm verantwortlich ist, z. B.

lsof -c nginx

Auch die geöffneten Dateien eines bestimmten Nutzers lassen sich einfach ermitteln:

lsof -u drilling

Natürlich lässt sich lsof Unix-typisch in vielfältiger Weise mit Filtern verknüpfen. Suchkriterien werden standardmäßig OR-vernüpft. Wer Kriterien mit UND verknüpfen will, verwenden dazu die Option „-a“:
Mit dem Caret-Zeichen („^“) können Filter wie PID, UID, Benutzer- oder Prozess-Namen einfach negiert werden. ^
So zeigt beispielsweise

lsof -u ^1

sämtliche offenen Dateien aller User mit Ausnahme derjenigen des Benutzers mit der PID 1 (root).

Sämtliche möglichen Optionen findet man wie üblich auf der Man-Page.