Einführung
Der lsof
Befehl steht für Liste offener Dateien und zeigt geöffnete Dateien und welcher Prozess sie verwendet. Da Linux jedes Objekt wie Geräte, Verzeichnisse usw. als Datei betrachtet, hindern nicht identifizierte offene Dateien Benutzer daran, sie zu ändern.
Darüber hinaus erschwert die schiere Anzahl von Dateien das Auffinden bösartiger Prozesse. Die lsof
Der Befehl hilft dabei, diese Prozesse zu identifizieren, damit Sie sie beenden können.
In diesem Artikel wird die Verwendung von erläutert lsof-Befehl unter Linux mit Beispielen.
Voraussetzungen
- Zugang zum Terminal.
- Sudo-Gruppenrechte.
- Root-Rechte für einige Befehle.
lsof-Befehlssyntax
Die lsof
Befehlssyntax ist:
lsof [options]
Hinweis: Führen Sie für die meisten Befehle lsof
aus mit sudo
um "Zugriff verweigert"-Fehler zu vermeiden.
lsof-Befehlsoptionen
Die lsof
Befehl hat viele Optionen. Die folgende Tabelle enthält Argumente, die am häufigsten verwendet werden:
Option | Beschreibung |
---|---|
lsof | Listet alle geöffneten Dateien auf. |
-b | Unterdrückt Kernel-Blöcke. |
/ [file system] / | Zeigt geöffnete Dateien in einem bestimmten Dateisystem an. |
/dev/tty* | Zeigt dem Terminal zugeordnete Dateien an. |
-u [username] | Druckt alle von einem Benutzer geöffneten Dateien. |
-u ^[username] | Druckt alle Dateien, die von allen außer einem bestimmten Benutzer geöffnet wurden. |
-c [process] | Listet alle Dateien auf, auf die von einem bestimmten Prozess zugegriffen wird. |
-p [process ID] | Zeigt alle geöffneten Dateien, die einer bestimmten Prozess-ID zugeordnet sind. |
-p ^[process ID] | Zeigt Dateien, die von allen anderen PIDs geöffnet wurden. |
-R | Listet übergeordnete Prozess-IDs auf. |
+D [directory path] | Druckt alle geöffneten Dateien in einem Verzeichnis. |
-i | Zeigt alle Dateien an, auf die über Netzwerkverbindungen zugegriffen wird. |
-i [IP version number] | Filtert Dateien basierend auf ihrer IP. |
- i [udp or tcp] | Filtert geöffnete Dateien basierend auf dem Verbindungstyp (TCP oder UDP). |
-i :[port number] | Findet Prozesse, die auf einem bestimmten Port laufen. |
-i :[port range] | Findet Prozesse, die auf bestimmten Portbereichen laufen. |
-t [file name] | Listet IDs von Prozessen auf, die auf eine bestimmte Datei zugegriffen haben. |
# kill -9 'lsof -t -u [user] ' | Beendet alle Benutzerprozesse. |
-d mem | Zeigt alle speicherabgebildeten Dateien. |
[path] | grep deleted | Druckt gesperrte gelöschte Dateien. |
man | Öffnet die Manpage. |
lsof-Befehlsbeispiele
lsof
enthält verschiedene Argumente, die es Benutzern ermöglichen, System- und Netzwerkadministrationsaktivitäten zu verwalten. Nachfolgend sind die häufigsten lsof
aufgeführt Anwendungsfälle.
Alle Dateien auflisten
Bei Ausführung ohne Optionen lsof
listet alle Dateien auf, die von irgendeinem Prozess geöffnet wurden:
sudo lsof
Der lsof
Befehl gibt viele Details aus. Leiten Sie daher immer lsof
mit less
um die Ausgabe seitenweise anzuzeigen.
sudo lsof | less
Um zum Ende der Liste zu navigieren, drücken Sie Enter oder Pfeil nach unten . Verlassen Sie die Liste mit Q .
Die lsof
Die Ausgabe besteht aus verschiedenen Spalten. Allerdings gelten nicht alle Spalten für jeden Dateityp. Der Header sieht so aus:
Die Standardspalten im lsof
Ausgabe sind:
- BEFEHL - Bezieht sich auf den Befehl, der dem Prozess zugeordnet ist, der die Datei geöffnet hat.
- PID - Die Prozessidentifikationsnummer des Prozesses, der die Datei ausführt.
- TID - Repräsentiert eine Task-Identifikationsnummer für den jeweiligen Prozess. Es ist leer, wenn ein Prozess, kein Task, die Datei geöffnet hat.
- TASKCMD - Bezieht sich auf den Befehlsnamen in der ersten Spalte. Allerdings TASKCMD kann abweichen, wenn eine Aufgabe ihren Befehlsnamen ändert.
- BENUTZER - Benennt den Benutzer, der den Prozess ausführt. Die Spalte enthält die Benutzer-ID oder den Namen.
- FD - Der Dateideskriptor, den der Prozess verwendet, um die Datei zuzuordnen.
- TYP - Zeigt den Dateityp und seine Identifikationsnummer an.
- GERÄT - Druckt Gerätenummern in Bezug auf die Datei.
- GRÖSSE/AUS - Repräsentiert den Wert oder die Datei, die während der Laufzeit genommen wurde (Größe oder Offset).
- KNOTEN - Die Knotennummer der lokalen Datei oder die Inode-Nummer des Verzeichnisses/Elternverzeichnisses.
- NAME - Zeigt den Pfad oder Link zur Datei an.
Kernel-Blöcke verbergen
Der Standardwert lsof
Ausgabe enthält auch Dateien, die vom Kernel geöffnet werden. Um Kernel-Blöcke zu unterdrücken, führen Sie lsof
aus mit dem -b
Flagge:
sudo lsof -b
Dateien eines bestimmten Dateisystems anzeigen
Verwenden Sie den lsof
Befehl zum Anzeigen offener Dateien in einem bestimmten Dateisystem:
sudo lsof / [file system] /
Zum Beispiel, um alle geöffneten Dateien im Ordner sys
anzuzeigen Verzeichnis, führen Sie aus:
sudo lsof / sys/
Terminaldateien drucken
Listen Sie alle offenen Dateien auf, die mit dem Terminal verbunden sind, indem Sie auf dev
abzielen Verzeichnis mit lsof
:
lsof /dev/tty*
Alle Dateien anzeigen, auf die ein Benutzer zugegriffen hat
Verwenden Sie lsof
mit einem -u
Flag, um Dateien anzuzeigen, die von einem bestimmten Benutzer geöffnet wurden:
sudo lsof -u [username]
Zum Beispiel:
lsof -u saraz
Der Befehl listet Dateien auf, die von saraz geöffnet wurden .
Um alle Dateien zu drucken, die von allen außer einem bestimmten Benutzer geöffnet wurden, führen Sie Folgendes aus:
sudo lsof -u ^[username]
Zum Beispiel:
lsof -u ^saraz
Die Ausgabe zeigt Dateien, die von anderen Benutzern als saraz kontrolliert werden .
Von einem Prozess verwendete Dateien anzeigen
Der -c
Flag öffnet alle Dateien, die von einem Prozess verwendet werden:
sudo lsof -c [process]
Zum Beispiel, um Dateien aufzulisten, die mit wpa_suppl
geöffnet wurden verarbeiten, ausführen:
sudo lsof -c wpa_suppl
Eine andere Möglichkeit besteht darin, nur einen Teil des Programmnamens zu verwenden:
sudo lsof -c wpa
lsof
gibt alle Programme zurück, die mit dem Begriff wpa
beginnen , die wpa_suppl enthält .
Außerdem die -c
Die Option ergibt die gleiche Ausgabe wie die Rohrleitung lsof
mit grep :
sudo lsof | grep wpa_suppl
Dateien drucken, die von einer bestimmten PID geöffnet wurden
Verwenden Sie den -p
Option zum Filtern bestimmter Dateien nach der Prozess-ID-Nummer (PID). Die folgende Ausgabe zeigt beispielsweise alle Dateien mit der PID 635.
sudo lsof -p 635
Fügen Sie andererseits ein Caretzeichen ^
hinzu Symbol zum Drucken von Dateien, die von allen anderen Prozessen geöffnet wurden:
sudo lsof -p ^635
Zusätzlich wird lsof
kombiniert mit dem -R
Flag fügt der Ausgabe die Parent Process Identification Number (PPID) hinzu.
Um PPID-Informationen für eine bestimmte PID zu erhalten, führen Sie Folgendes aus:
sudo lsof -p [PID] -R
Um beispielsweise die PPID für die 635-PID abzurufen, geben Sie Folgendes ein:
sudo lsof -p 635 -R
Die Ausgabe zeigt die der Kopfzeile hinzugefügte PPID-Spalte.
Dateien unter einem Verzeichnis anzeigen
Um alle Dateien anzuzeigen, die in einem Verzeichnis geöffnet wurden, verwenden Sie den folgenden Befehl:
sudo lsof +D [directory path]
Diese Option wiederholt auch die Unterverzeichnisse. Um Wiederholungen zu vermeiden, verwenden Sie +d
Flagge.
Dateien anzeigen, auf die über Netzwerkverbindungen zugegriffen wird
Verwenden Sie den -i
mit lsof
kennzeichnen um zu überprüfen, welche Dateien von einer Netzwerkverbindung geöffnet werden. Führen Sie diesen Befehl aus:
sudo lsof -i
Das obige Beispiel druckt Dateien, die über eine Netzwerkverbindung geöffnet sind, unabhängig vom Verbindungstyp.
Der -i
flag verleiht lsof
viel Vielseitigkeit , mit dem Benutzer Dateien nach verschiedenen Kriterien filtern können. Verwenden Sie lsof -i [options]
zu:
- Filtern Sie Dateien basierend auf ihrer IP mit:
sudo lsof -i [IP version number]
Führen Sie beispielsweise diesen Befehl aus, um nur IPv4-Dateien anzuzeigen:
sudo lsof -i 4
Drucken Sie dagegen nur IPv6-Dateien mit:
sudo lsof -i 6
- Nur Dateien anzeigen, die tcp verwenden oder udp Verbindung durch Angabe des Protokolltyps:
sudo lsof -i [udp or tcp]
- Prozesse finden, die auf einem bestimmten Port laufen . Diese Option ist nützlich, um zu überprüfen, welche Datei verhindert, dass eine andere App an einen bestimmten Port gebunden wird. Führen Sie den Befehl mit der Portnummer oder dem Dienstnamen aus der Namensspalte aus:
sudo lsof -i :[port number/name]
- Alle Dateien drucken, die in bestimmten Portbereichen geöffnet sind .
Um beispielsweise offene Dateien der UDP-Portbereiche 1-1024 aufzulisten, führen Sie Folgendes aus:
IDs von Prozessen auflisten, die geöffnete Dateien enthalten
Um PIDs für Prozesse anzuzeigen, die eine bestimmte Datei geöffnet haben, verwenden Sie -t
und geben Sie den Dateinamen an.
lsof -t [file name]
Alle Prozesse des Benutzers beenden
Der -t
flag beendet auch alle Prozesse eines bestimmten Benutzers. Zum Beispiel, um alle Prozesse des Benutzers notsara zu beenden , führen Sie diesen Befehl als root aus:
# kill -9 'lsof -t -u notsara'
Alle speicherabgebildeten Dateien drucken
lsof
druckt, welche Prozesse speicherabgebildete Dateien haben. Um diese Prozesse anzuzeigen, führen Sie Folgendes aus:
lsof -d mem
Gesperrte gelöschte Dateien anzeigen
Ein Prozess hält manchmal große Dateien gesperrt, selbst nachdem sie gelöscht wurden, wodurch Speicherplatz verbraucht wird.
Verwenden Sie Lsof
um Dateien zu finden, die in Linux gelöscht wurden, aber immer noch von einem oder mehreren Prozessen gesperrt sind.
Suchen Sie beispielsweise gelöschte Dateien im Stammverzeichnis mit einem Schrägstrich (/
) als Pfadsymbol:
sudo lsof [path] | grep deleted
Mehrere Optionen kombinieren
Der lsof
Der Befehl ermöglicht mehrere Suchelemente in der Befehlszeile. Verwenden Sie UND und ODER Logik, um verschiedene Argumente zu kombinieren, um bestimmte Ergebnisse zu erhalten. Nachfolgend finden Sie die häufigsten Beispiele.
- Dateien auflisten, die von einem bestimmten Benutzer oder geöffnet wurden verarbeiten mit:
sudo lsof -u [username] -c [process]
Die Ausgabe gibt beide Dateien aus, die vom Benutzer saraz geöffnet wurden und diejenigen, die vom Prozess snapd verwendet werden .
- Nur Dateien anzeigen, die mit dem ersten Suchbegriff und dem zweiten Suchbegriff mit dem logischen Operator
-a
übereinstimmen (und):
sudo lsof -u [username] -c [process] -a
In diesem Fall lsof
zeigt nur Dateien, die vom Benutzer saraz geöffnet wurden und die Bash verarbeiten.
- Alle Netzwerkverbindungen eines Benutzers finden:
sudo lsof -i -u [username] -a
Der -i
und -a
Flaggen mit dem lsof
Befehl gibt alle Aktivitäten des Benutzers root aus .
Erfahren Sie mehr über lsof
Die lsof
Der Befehl hat mehr Optionen als jeder andere Linux-Befehl. Die man
Seite ist fast 2000 Zeilen lang und bietet viele Informationen.
Um die Möglichkeiten des Befehls zu erkunden, führen Sie Folgendes aus:
man lsof
Fazit
Dieses Tutorial zeigt Ihnen, wie Sie lsof
verwenden
Befehl zur Behebung potenzieller Sicherheits- und Systemprobleme mit praktischen Beispielen.
Als Nächstes erfahren Sie, wie Sie Dateien und Verzeichnisse unter Linux kopieren und zwei Dateien mit dem Linux-Befehl diff vergleichen.