Das Kommando lsof ist der Schlüssel für alle Informationen zu geöffneten Dateien.
Wenn Sie auf der Kommandozeile das Kommando einfach ohne weitere Parameter geben, erhalten Sie eine ellenlange Liste. Die meisten Einträge darin interessieren Sie wahrscheinlich auch nicht, etwas welche Anwendung gerade bestimmte Library-Dateien verwendet.
lsof anpassen
Der Befehl lsof kann für die meisten Fragestellungen so modifiziert werden, dass er ganz spezifische Antworten gibt.
Achtung: Je nach Linux-Variante und den Rechten Ihres Kontos müssen Sie eventuell ein sudo davorstellen, damit der Befehl richtig funktioniert.
Zusätzlich kann lsof auch anzeigen, welche Netzwerkverbindungen gerade verwendet werden. Wie das geht, erfahren Sie nicht hier, sondern in diesem Tipp: Linux: Offene Internet-Verbindungen anzeigen.
Anzeige der Verwendung bestimmter Dateien oder Geräte
Möchten Sie ganz gezielt wissen, wer der Nutzer einer bestimmten Datei ist, dann geben Sie einfach Pfad und Namen der Datei als Parameter an.
Der folgende Befehl sieht zum Beispiel nach, wer die Apache-Logdatei verwendet:
lsof /var/log/apache2/access.log
Nicht überraschenderweise kommt dabei der Prozess „apache2“ als Information zurück.
Weil bei Linux die meisten Geräte als Pseudofiles im Dateisystem eingeklinkt sind, funktioniert diese Methode auch dazu, die Nutzung von DVD- oder Tape-Laufwerken zu überprüfen.
Sie müssen dazu nur den Pfad der Gerätedatei wissen. Folgender Befehl prüft zum Beispiel auf den meisten Linux-Systemen, ob das CD-/DVD-Laufwerk gerade gebraucht wird:
lsof /dev/cdrom
Verzeichnispfade als Kriterium einsetzen
Interessant ist aber auch, einen bestimmten Verzeichnisbaum dahingehend zu prüfen, ob noch Dateien offen sind. Haben Sie zum Beispiel einen Samba-Server am laufen, sehen Sie so, ob ein Nutzer darin etwas verwendet. Im Fall eines notwendigen Neustarts, können Sie ihren Nutzern damit viel Ärger ersparen.
Liegen die gemeinsamen Dateien etwa im Verzeichnis /var/samba, dann lautet der Befehl so
lsof +D /var/samba
Damit wird auch auf Dateien in Unterverzeichnissen geprüft. Verwenden Sie stattdessen ein kleines D, um nur im genannten Verzeichnis selbst zu testen und die Subdirectories auszunehmen:
lsof +d /var/samba
Dateien eines bestimmten Benutzers oder Prozesses zeigen
Möchten Sie wissen, was ein bestimmter Nutzer so alles offen hat, dann verwenden Sie den Parameter -u gefolgt von seinem Namen. Das funktioniert auch mit den internen Accounts, die für bestimmte Prozesse reserviert sind. So finden Sie zum Beispiel heraus, was der Benutzer „mysql“ gerade alles geöffnet hat:
lsof -u mysql
Gezielter als über den Account-Namen filtern Sie die Anzeige für bestimmte Prozesse über die Prozess-ID. Wenn zum Beispiel mehrere Programme über den gleichen Useraccount laufen, können Sie damit gezielt einen bestimmten Prozess ansprechen.
lsof -p <Prozess-ID>
Die Prozess-ID müssen Sie aber zuerst herausfinden, wie etwa per top oder ps.
Im folgenden Bild wird zum Beispiel die PID des cron-Tools ermittelt und dann nachgesehen, was dieses Programm alles an Dateien nutzt.