Weil unter Unix bekanntlich alles eine Datei ist, taugt Lsof, die Suchmaschine für offene Files, zugleich als Troubleshooting-Tool für den Netzwerker.
Häufig interessiert beim Netzwerken beispielsweise, welche Ports geöffnet sind. So lässt sich klären, ob der Datenbankserver überhaupt auf Clients hört, ob der Webserver Anfragen bedienen kann oder welche potenziellen Angriffsziele sich Hackern im Netz bieten. Alle offenen Ports listet:
lsof -n -i
Die Liste kann lang sein, sie lässt sich aber beliebig eingrenzen. So erhält man alle Prozesse, die an beliebigen TCP-Ports auf Verbindungen lauschen mit:
lsof -i -sTCP:LISTEN
Ist beispielsweise nur ein bestimmtes Protokoll von Interesse, kann der Admin dieses ebenfalls hinter der Option »-i« angeben:
lsof -n -i :imaps
Das Weglassen einer IP-Adresse vor dem Doppelpunkt wirkt hier wie eine Wildcard: Alle Prozesse mit offenen IMAP-Ports erscheinen in der Ausgabe. Statt auf das Protokoll ließe sich das Listing beispielsweise auch auf einen User beschränken, das ermöglicht die Option »-u«. Natürlich lassen sich auch beliebige Optionen kombinieren. Dabei ist jedoch zu beachten, dass »lsof« per Default alle Optionen mit »OR« verknüpft.
Wer sich aber für die IMAP-Verbindungen des Users »jcb« interessiert, braucht stattdessen eine AND-Verknüpfung. Die stellt der Schalter »-a« her:
lsof -a -n -u jcb -i :imaps
Man könnte auch fragen: Was macht der User »jcb« in Verbindung mit einer bestimmten IP-Adresse? Oder anders formuliert:
lsof -a -u jcb -i @IP-Adresse
Die Suchparameter lassen sich auch negieren, dazu dient das Caret-Zeichen. So liefert
lsof -a -n -i TCP -u ^jcb
alle TCP-Verbindungen von allen Usern – außer von »jcb«. Statt des Usernamens wäre auch der Name einer Applikation als Filter verwendbar:
lsof -a -n -c firefox -i :https
Ein weiterer nützlicher Anwendungsfall ist die Auflistung aller vorhandenen Sockets mit dem Parameter »-U«. Hier kann der Admin die Ergebnisliste wieder eingrenzen, wie schon gezeigt. Alle Sockets des Dateimanagers Nautilus zeigt etwa:
lsof -a -n -U -c nautilus
Anstelle des Namens der Applikation kann er auch die PID eines Prozesses mit dem Parameter »-p« angeben. Und natürlich ist »lsof« auch dann nützlich, wenn die Files gewöhnliche Dateien sind. So listet
lsof +D /var/log
alle offenen Dateien unter »/var/log«. Auch lassen sich die Lsof-Ausgaben gewinnbringend durch andere Kommandos oder in Shellskripten weiterverarbeiten. Ein Beispiel ist die Aufgabe, alle Prozesse eines bestimmten Nutzers zu beenden. Das gelingt zum Beispiel so:
kill -9 `lsof -t -u Username`
Eine kleine Herausforderung im Umgang mit »lsof« sind die vielen Optionen. Für manchen kann es da eine Erleichterung sein, sich für die wichtigsten Einsatzfälle Aliasse anzulegen (Listing 1). Am besten packt man die in ein File, das die Shell beim Start liest, etwa in ».bashrc«.
Listing 1
Lsof-Aliasse
01 alias myfiles='sudo lsof -u `whoami`' 02 alias byuser='sudo lsof -u' 03 alias bypid='sudo lsof -p' 04 alias byfile='sudo lsof' 05 alias byprogram='sudo lsof -c'







2018 und wir benutzen immer noch Backticks?