Heute werden wir das Terminal verwenden, um die Dateien aufzulisten, die von einem Prozess in Linux geöffnet wurden . Dies ist eine sehr häufige Aufgabe, der wir uns früher oder später stellen müssen, wenn wir Linux-Server verwalten, um besser verhindert zu werden.
In meinem Fall ist die Notwendigkeit entstanden, die von einem Prozess geöffneten Dateien aufzulisten, weil ich herausfinden musste, wo ein Dämon seine Aktivität aufzeichnet . Diese Aktivität wusste, dass er es in einer Datei aufzeichnete, aber er wusste nicht, wo es sich befand. Also machte ich mich an die Arbeit und es war, als der Befehl lsof
erschien, um das Problem zu beheben.
So listen Sie die Dateien auf, die von einem Prozess unter Linux mit dem Befehl lsof geöffnet wurden.
Wie ich erwartet hatte, werden wir den Befehl lsof
, der in allen Linux-Distributionen, * BSD usw. verfügbar ist. Es ist ein sehr flexibler Befehl, der uns mehr als nur beeilen kann.
Die grundlegendste Verwendung ist die Ausführung des Befehls sudo lsof
und es wird eine Liste mit allen Dateien erstellt, die von Prozessen geöffnet wurden . Diese Liste ist normalerweise sehr umfangreich, daher müssen wir sie filtern, um das Gesuchte zu finden, aber wir werden es später sehen.
Grundlage für das Verständnis der Ausgabe des Befehls lsof.
Wenn wir uns die Ausgabe des Befehls lsof
ansehen, werden die Informationen in verschiedenen Spalten angezeigt. Die meisten Spalten erkennen ihre Bedeutung intuitiv (pid, user, name usw.) , andere (FD, Type usw.) sind möglicherweise etwas seltsam, daher werden wir ihre Bedeutung schnell erläutern.
In der Spalte FD
werden die Dateideskriptoren (File Descriptor) angezeigt . Die möglichen Werte von FD sind:
- cwd : verweist auf das aktuelle Arbeitsverzeichnis .
- txt : verweist auf eine Textdatei.
- mem : Verweis auf eine Speicherzuordnungsdatei.
- mmap : bezieht sich auf ein zugeordnetes Speichergerät.
- Nummer : Manchmal wird eine Nummer angezeigt, die sich auf den Dateideskriptor bezieht. Dieser Nummer folgen die Buchstaben
r
(Datei nur zum Lesen öffnen) ,w
(Datei zum Schreiben öffnen) oderu
(Datei zum Lesen und Schreiben öffnen) .
Auf der anderen Seite kann die Spalte TYPE
die folgenden Werte anzeigen:
- REG : reguläre Datei.
- DIR : Verzeichnis.
- FIFO : First In First Out (zuerst rein, zuerst raus) .
- CHR : Sonderzeichendatei.
Es gibt weitere Werte, die FD- und TYPE-Coulmnas annehmen können, aber in diesem Lernprogramm werden nur die am häufigsten verwendeten zusammengefasst. Wenn Sie weitere Informationen benötigen, man lsof
die man lsof
mit dem Befehl man lsof
.
Praktische Beispiele für die Verwendung des Befehls lsof.
Wir werden eine Reihe von Beispielen sehen, die regelmäßig bei Systemadministrationsaufgaben verwendet werden.
Listet die Dateien auf, die von einem bestimmten Prozess geöffnet wurden.
Um die von einem bestimmten Prozess geöffneten Dateien aufzulisten, müssen wir zuerst Ihre PID herausfinden. Der einfachste Weg , die PID eines Prozesses zu ermitteln, indem man seinen Namen kennt, ist der pidof nombre_proceso
Befehl pidof nombre_proceso
.
Als Beispiel werden wir uns vorstellen, dass wir die PID des MySQL-Serverprozesses herausfinden wollen, für den ich den pidof mysqld
. Dieser Befehl gibt die Nummer der PID zurück, von der wir als Beispiel annehmen, dass sie 1009
.
Sobald ich die PID herausgefunden habe, muss ich nur den lsof -p PID
Befehl lsof -p PID
ausführen, der durch die Übertragung auf unser Beispiel sudo lsof -p 1009
.
Dieser Befehl wird am häufigsten verwendet und ermöglicht es mir , die Pfade der Protokolldateien eines Apache- oder Nginx- Servers schnell zu ermitteln (es ist erforderlich, lsof mit Root-Berechtigungen auszuführen) .
Listet die Dateien auf, die von einem bestimmten Benutzer geöffnet wurden.
Dank dieses Befehls können wir auch die Dateien auflisten, die von einem bestimmten Benutzer geöffnet wurden . In diesem Fall lsof -u nombre_usuario
auszuführende Befehl lsof -u nombre_usuario
.
Als Beispiel listen wir alle Dateien auf, die vom Benutzer www-data
geöffnet wurden und die üblicherweise auf Apache-Servern mit dem Befehl sudo lsof -u www-data
.
Listen Sie die Prozesse auf, die eine bestimmte Datei geöffnet haben.
Manchmal kennen wir den Pfad der geöffneten Datei und müssen herausfinden, welcher Prozess diese Datei geöffnet hat. In diesem Fall lsof /ruta/ejemplo/archivo
der Befehl lsof /ruta/ejemplo/archivo
.
Wir werden ein Beispiel geben, in dem wir herausfinden, welcher Prozess die Datei /var/log/apache2/access.log
geöffnet hat. /var/log/apache2/access.log
sind /var/log/apache2/access.log
der oder die Prozesse, die einem Apache-Server entsprechen. In diesem Fall sudo lsof /var/log/apache2/access.log
der Befehl sudo lsof /var/log/apache2/access.log
.
Liste geöffneter Dateien in einem Verzeichnis.
Eine weitere interessante Option besteht darin, alle geöffneten Dateien aufzulisten, die sich im selben Verzeichnis befinden. Der auszuführende Befehl wäre lsof +D /ruta/ejemplo/directorio/
.
Auf diese Weise können wir einen sehr nützlichen Befehl ausführen, um die offenen Protokolldateien des Systems herauszufinden. Dazu müssen wir nur den Befehl sudo lsof +D /var/log/
ausführen.
Alle Netzwerk- und Internetdateien auflisten.
Ein Prozess kann nicht nur eine Datei oder einen Ordner öffnen, sondern auch eine Verbindung, einen Socket, einen Stream usw. Mit dem folgenden Befehl können wir alle offenen Netzwerk- und Internetdateien auflisten: sudo lsof -i
.