GNU/Linux >> LINUX-Kenntnisse >  >> Linux

lsof-Befehl unter Linux mit Beispielen

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:

  1. 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
  1. Nur Dateien anzeigen, die tcp verwenden oder udp Verbindung durch Angabe des Protokolltyps:
sudo lsof -i [udp or tcp]
  1. 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]
  1. 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.

  1. 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 .

  1. 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.

  1. 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.


Linux
  1. wc Linux-Befehl mit Beispielen

  2. Linux Tee-Befehl mit Beispielen

  3. JQ-Befehl in Linux mit Beispielen

  4. 7 Beispiele für den lsof-Befehl unter Linux

  5. Linux-rsync-Befehl mit praktischen Beispielen

15 Linux-PS-Befehl mit Beispielen

Linux-Suchbefehl mit praktischen Beispielen

lsof-Befehl unter Linux (10 Beispiele)

Linux-IP-Befehl mit Beispielen

Tutorial für Linux-Suchbefehle (mit Beispielen)

Linux-Comm-Befehl mit Beispielen