Einführung in Lsof

Unter Linux werden viele Objekte als Datei betrachtet, unabhängig davon, ob es sich bei dem Objekt tatsächlich um eine Datei, ein Gerät, ein Verzeichnis oder einen Socket handelt. Das Auflisten einer Datei ist einfach, dafür ist die Shell integriert ls. Was aber, wenn ein Benutzer sehen möchte, welche Dateien derzeit vom Webserverprozess geöffnet werden? Oder ob dieser Benutzer herausfinden wollte, welche Dateien in einem bestimmten Verzeichnis geöffnet sind? Hier lsofkommt das Spiel ins Spiel. Stellen Sie sich vor , lsofwie ein lsmit dem Zusatz „offener Dateien“.

Bitte beachten Sie, dass die BSDs zwar ein anderes Dienstprogramm für diesen Job haben fstat, aber auch einige andere Unix-Varianten (z. B. Solaris) besitzen lsof. Die Optionen und Flags unterscheiden sich auf den anderen Plattformen ebenso wie das Aussehen der Ausgabe, aber im Allgemeinen sollte das Wissen in diesem Artikel auch für sie gelten.

Schauen wir uns zunächst das Format der lsofAusgabe an und wie sie gelesen werden soll. Die übliche Ausgabe lsofohne Parameter würde wie folgt aussehen. Dies wurde aus Gründen der Lesbarkeit gekürzt.

COMMAND    PID  TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init         1            root  cwd       DIR              254,1      4096          2 /
init         1            root  rtd       DIR              254,1      4096          2 /
init         1            root  txt       REG              254,1     36992    7077928 /sbin/init
init         1            root  mem       REG              254,1     14768    7340043 /lib/x86_64-linux-gnu/libdl-2.13.so
init         1            root  mem       REG              254,1   1603600    7340040 /lib/x86_64-linux-gnu/libc-2.13.so
init         1            root  mem       REG              254,1    126232    7340078 /lib/x86_64-linux-gnu/libselinux.so.1
init         1            root  mem       REG              254,1    261184    7340083 /lib/x86_64-linux-gnu/libsepol.so.1
init         1            root  mem       REG              254,1    136936    7340037 /lib/x86_64-linux-gnu/ld-2.13.so
init         1            root   10u     FIFO               0,14       0t0       4781 /run/initctl

Diese Spalten bedeuten Folgendes:

  • BEFEHL - Der Prozess, zu dem eine geöffnete Datei gehört. In diesem Beispiel bezieht sich alles auf init.
  • PID - Die Prozessidentifikationsnummer des Prozesses.
  • USER - Der Benutzer, unter dem der Prozess ausgeführt wird. Denn inites ist fast immer root.
  • FD - Der Dateideskriptor der Datei, am häufigsten:
    • cwd- Das aktuelle Arbeitsverzeichnis (möglicherweise stellen Sie die Ähnlichkeit mit dem pwdBefehl fest, der das aktuelle Arbeitsverzeichnis druckt).
    • rtd - Das Stammverzeichnis eines Prozesses.
    • txt- A text file, dies kann entweder eine Konfigurationsdatei bedeuten, die sich auf den Prozess bezieht, oder der "Quellcode", der sich auf den Prozess bezieht (oder zu diesem gehört).
    • mem - Eine sogenannte "Speicherzuordnungsdatei", dh ein Segment des virtuellen Speichers (gelesen: RAM), das einer Datei zugewiesen wurde.
    • Eine Zahl - Die Zahl stellt den tatsächlichen Dateideskriptor dar. Das Zeichen nach der Zahl ist der Modus, in dem die Datei geöffnet wird:
    • r - Lesen.
    • w - Schreiben.
    • u - Lesen und Schreiben.
  • TYP - Gibt den tatsächlichen Dateityp an. Die häufigsten sind:
    • REG - Eine reguläre Datei.
    • DIR - Ein Verzeichnis.
    • FIFO - Als Erster rein, als erster raus.
  • GERÄT - Die Haupt- und Nebennummer des Geräts, auf dem sich die Datei befindet.
  • GRÖSSE - Die Größe der Datei in Bytes.
  • NODE - Die Inode-Nummer der Datei.
  • NAME - Der Name der Datei.

Das mag vorerst ein bisschen überwältigend sein, aber wenn Sie lsofein paar Mal damit arbeiten, wird es schnell in Ihr Gehirn eindringen .

Wie oben erwähnt, wurde die Ausgabe von lsofhier verkürzt. lsofErzeugt ohne Argumente oder Filter Hunderte von Ausgabezeilen, die Sie nur verwirren.

Es gibt zwei grundlegende Ansätze, um dieses Problem zu lösen:

  • Verwenden Sie eine oder mehrere lsofBefehlszeilenoptionen, um die Ergebnisse einzugrenzen.
  • Führen Sie die Ausgabe beispielsweise durch grep.

Während die letztere Option möglicherweise komfortabler klingt, da Sie sich die lsofBefehlszeilenoptionen nicht merken müssen , ist sie im Allgemeinen nicht so flexibel und effizient, sodass wir uns an die erste halten.

Stellen Sie sich vor, Sie möchten eine Datei mit Ihrem bevorzugten Texteditor öffnen und der Texteditor teilt Ihnen mit, dass sie nur im schreibgeschützten Modus geöffnet werden kann, da bereits ein anderes Programm darauf zugreift. lsofhilft Ihnen herauszufinden, wer der Täter ist:

lsof /path/to/your/file

Dies erzeugt eine Ausgabe ähnlich der folgenden:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
vim 2679 root    5w   REG  254,1   121525 6035622 /root/lsof.txt

Anscheinend hast du vergessen, eine ältere Sitzung zu schließen! Ein sehr ähnliches Problem tritt auf, wenn Sie versuchen, die Bereitstellung einer NFS-Freigabe aufzuheben, und umountIhnen mitteilen , dass dies nicht möglich ist, da noch etwas auf den bereitgestellten Ordner zugreift. Auch hier lsofkönnen Sie bei der Identifizierung des Täters helfen:

lsof +D /path/to/your/directory/

Beachten Sie den abschließenden Schrägstrich, der wichtig ist. Andernfalls lsofwird davon ausgegangen, dass Sie eine reguläre Datei meinen. Lassen Sie sich nicht durch das +vor der Flagge stehende - es lsofgibt so viele Befehlszeilenoptionen, die es +zusätzlich zu den allgemeineren benötigt -. Die Ausgabe würde folgendermaßen aussehen:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
mocp    5637  music    4r   REG   0,19 10147719 102367344 /home/Music/RMS_GNU_SONG.ogg

Das bedeutet, dass der Prozess mocpmit der PID 5637, die dem Benutzer musicgehört, eine aufgerufene Datei geöffnet hat RMS_GNU_SONG.ogg. Selbst nach dem Schließen dieses Prozesses besteht jedoch immer noch ein Problem: Das NFS-Volume kann nicht ausgehängt werden.

lsofhat ein -cFlag, das Dateien anzeigt, die einen beliebigen Prozessnamen geöffnet haben.

lsof -c mocp

Das würde eine Ausgabe erzeugen, die so aussieht:

mocp    9383  music    4r   REG   0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg

In diesem Beispiel wird eine andere Instanz mocpausgeführt, die verhindert, dass Sie die Freigabe der Freigabe aufheben. Nach dem Herunterfahren dieses Prozesses möchten Sie sicherstellen, dass dem Benutzer musickeine anderen potenziell problematischen Dateien geöffnet sind. lsofhat ein -uFlag zum Anzeigen von Dateien, die von einem bestimmten Benutzer geöffnet wurden. Denken Sie daran, dass eine Datei nicht immer nur eine normale Datei auf Ihrer Festplatte ist!

lsof -u music

Sie können auch mehrere durch Kommas getrennte Benutzer übergeben:

lsof -u music,moremusic

Ein wichtiger Hinweis zum Standardverhalten von lsof: Die Ergebnisse sind ODER- basiert. Dies bedeutet, dass Dateiergebnisse von Prozessen geöffnet werden, die entweder dem Benutzer musicoder dem Benutzer gehören moremusic. Wenn Sie Ergebnisse sehen möchten, die mit Prozessen übereinstimmen, die beiden Benutzern gehören, müssen Sie das Flag übergeben -a:

lsof -au music, moremusic

Da sich beide Benutzer in der Gruppe befinden musicusers, können Sie auch Dateien basierend auf der Gruppe auflisten:

lsof -g musicusers

Sie können auch Befehlszeilenflags kombinieren:

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

In der letzten Zeile haben wir ein weiteres spezielles Flag hinzugefügt - ^das für ein logisches NICHT steht . Wenn die Ausgabe nach dem Ausführen dieses Befehls leer ist, ist das Aufheben der Bereitstellung höchstwahrscheinlich erfolgreich.

In den vorherigen Beispielen haben wir uns hauptsächlich reguläre Dateien angesehen. Wie wäre es mit Sockets und Netzwerkverbindungen?

Um alle aktuellen Netzwerkverbindungen aufzulisten, lsofhat das -iFlag:

lsof -i

Die Ausgabe sieht ähnlich aus wie die, die wir bisher gesehen haben ...

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
owncloud  3509  myuser   25u  IPv4  44946      0t0  TCP strix.local:34217->myserver.vultr.com:https (ESTABLISHED)
firefox   3612  myuser   82u  IPv4  49663      0t0  TCP strix.local:43897->we-in-f100.1e100.net:https (ESTABLISHED)
ssh       3784  myuser    3u  IPv4  10437      0t0  TCP strix.local:51416->someserver.in:ssh (ESTABLISHED)
wget      4140  myuser    3w  IPv4  45586      0t0  TCP strix.local:54460->media.ccc.de:http (CLOSE_WAIT)

... bis auf einen Unterschied: Anstelle von Dateinamen oder Verzeichnissen werden in der Spalte NAMEjetzt Verbindungsinformationen angezeigt. Jede Verbindung besteht aus folgenden Teilen:

  • Protokoll.
  • Lokaler Hostname.
  • Quellport der Verbindung.
  • Ziel-DNS-Name.
  • Zielhafen.
  • Status der Verbindung.

Wie bei vielen anderen Tools, können Sie lösen DNS - Namen Opt-out und Ports ( -nund -Psind). Das Flag -inimmt zusätzliche Parameter an. Sie können festlegen , ob oder nicht zeigen tcp, udpoder icmpVerbindungen oder bestimmte Ports:

lsof -i :25
or
lsof -i :smtp

Auch hier können Parameter kombiniert werden. Das folgende Beispiel ...

lsof -i tcp:80

... zeigt Ihnen nur TCP-Verbindungen über Port 80 an. Sie können es auch mit den Optionen kombinieren, die Sie bereits aus "klassischen" Dateien kennen:

lsof -a -u httpd -i tcp

Dies zeigt Ihnen alle vom Benutzer geöffneten TCP-Verbindungen httpd. Beachten Sie das -aFlag, das das Standardverhalten von ändert lsof(wie bereits erwähnt). Wie bei den meisten Befehlszeilentools können Sie extrem tief gehen. Im Folgenden werden nur TCP-Verbindungen angezeigt, deren Status "ESTABLISHED" lautet:

lsof -i -s TCP:ESTABLISHED

An dieser Stelle sollten Sie ein grundlegendes Verständnis der Funktionsweise lsofsowie einiger gängiger Anwendungsfälle haben. Weitere Informationen finden Sie in der Manpage von lsofauf Ihrem System.



Leave a Comment

So installieren Sie MODX Revolution auf einem CentOS 7 LAMP VPS

So installieren Sie MODX Revolution auf einem CentOS 7 LAMP VPS

Verwenden Sie ein anderes System? MODX Revolution ist ein schnelles, flexibles, skalierbares, kostenloses und Open-Source-Content-Management-System (CMS) für Unternehmen, das i

Installieren von McMyAdmin unter Ubuntu 14.10

Installieren von McMyAdmin unter Ubuntu 14.10

McMyAdmin ist ein Minecraft-Server-Kontrollfeld, mit dem Sie Ihren Server verwalten können. Obwohl McMyAdmin kostenlos ist, gibt es mehrere Editionen, von denen einige pai sind

Richten Sie einen TeamTalk-Server unter Linux ein

Richten Sie einen TeamTalk-Server unter Linux ein

TeamTalk ist ein Konferenzsystem, mit dem Benutzer hochwertige Audio- / Videogespräche führen, Text chatten, Dateien übertragen und Bildschirme freigeben können. Es i

So installieren und konfigurieren Sie CyberPanel auf Ihrem CentOS 7-Server

So installieren und konfigurieren Sie CyberPanel auf Ihrem CentOS 7-Server

Verwenden Sie ein anderes System? Einführung CyberPanel ist eines der ersten Control Panels auf dem Markt, das sowohl Open Source als auch OpenLiteSpeed ​​verwendet. Was ist das?

Installieren Sie phpBB With Apache unter Ubuntu 16.04

Installieren Sie phpBB With Apache unter Ubuntu 16.04

PhpBB ist ein Open Source Bulletin Board Programm. Dieser Artikel zeigt Ihnen, wie Sie phpBB auf einem Apache-Webserver unter Ubuntu 16.04 installieren. Es wurde geschrieben

Richten Sie einen Benutzer ohne Rootberechtigung mit Sudo Access unter Ubuntu ein

Richten Sie einen Benutzer ohne Rootberechtigung mit Sudo Access unter Ubuntu ein

Es kann gefährlich sein, nur einen Benutzer zu haben, nämlich root. Lassen Sie uns das beheben. Vultr bietet uns die Freiheit, mit unseren Benutzern und unseren Servern zu tun, was wir wollen

Installieren Sie eSpeak unter CentOS 7

Installieren Sie eSpeak unter CentOS 7

Verwenden Sie ein anderes System? ESpeak kann TTS-Audiodateien (Text-to-Speech) generieren. Diese können aus vielen Gründen nützlich sein, z. B. um Ihr eigenes Turin zu erstellen

So installieren Sie Thelia 2.3 unter CentOS 7

So installieren Sie Thelia 2.3 unter CentOS 7

Verwenden Sie ein anderes System? Thelia ist ein Open-Source-Tool zum Erstellen von E-Business-Websites und zum Verwalten von Online-Inhalten, die in PHP geschrieben wurden. Thelia Quellcode i

Installieren von Fuel CMS unter Ubuntu 16.04 LTS

Installieren von Fuel CMS unter Ubuntu 16.04 LTS

Verwenden Sie ein anderes System? Fuel CMS ist ein CodeIgniter-basiertes Content-Management-System. Der Quellcode wird auf GitHub gehostet. Diese Anleitung zeigt Ihnen, wie t

Installieren und Verwenden von Yunohost unter Debian 7 x64

Installieren und Verwenden von Yunohost unter Debian 7 x64

Dieses Tutorial führt Sie durch die Installation des Yunohost Complete Server-Kontrollfelds unter Debian. Folgen Sie einfach dem Tutorial und Ihr Server wird in Betrieb sein

So installieren Sie Cockpit unter CentOS 7

So installieren Sie Cockpit unter CentOS 7

Cockpit ist ein kostenloses Open Source-Programm für die Linux-Serververwaltung. Es ist sehr leicht und hat eine schöne, einfach zu bedienende Weboberfläche. Es erlaubt System

So richten Sie ein GitHub Style Wiki mit Gollum unter CentOS 7 ein

So richten Sie ein GitHub Style Wiki mit Gollum unter CentOS 7 ein

Gollum ist die Git-basierte Wiki-Software, die als Backend des GitHub-Wikis verwendet wird. Durch die Bereitstellung von Gollum können Sie ein GitHub-ähnliches Wiki-System auf Ihnen hosten

So richten Sie die TCP-Optimierung unter Linux ein

So richten Sie die TCP-Optimierung unter Linux ein

Einführung Haben Sie Probleme mit der Konnektivität, wenn Besucher aus anderen Ländern auf Ihre Website zugreifen? Ich frage mich, warum die Download-Geschwindigkeit von Ihrem Foreig

So installieren Sie Gitea unter Fedora 29

So installieren Sie Gitea unter Fedora 29

Verwenden Sie ein anderes System? Gitea ist ein alternatives Open-Source-Versionskontrollsystem, das von Git unterstützt wird. Gitea ist in Golang geschrieben und ist

So stellen Sie Ghost v0.11 LTS unter Ubuntu 16.04 bereit

So stellen Sie Ghost v0.11 LTS unter Ubuntu 16.04 bereit

Verwenden Sie ein anderes System? Ghost ist eine Open-Source-Blogging-Plattform, die seit 201 bei Entwicklern und normalen Benutzern immer beliebter wird

So installieren Sie Paste 2.1 auf einem Fedora 26 LAMP VPS

So installieren Sie Paste 2.1 auf einem Fedora 26 LAMP VPS

Verwenden Sie ein anderes System? Paste 2.1 ist eine einfache und flexible, kostenlose und Open-Source-Pastebin-Anwendung zum Speichern von Code, Text und mehr. Es war ursprünglich

So installieren Sie Pip unter Linux

So installieren Sie Pip unter Linux

Pip ist ein Tool zum Verwalten von Python-Paketen. Die Verwendung eines Paketmanagers ermöglicht eine effiziente Verwaltung Ihres Servers. In diesem Tutorial erkläre ich, wie t

So stellen Sie Google BBR unter CentOS 7 bereit

So stellen Sie Google BBR unter CentOS 7 bereit

BBR (Bottleneck Bandwidth and RTT) ist ein neuer Algorithmus zur Überlastungskontrolle, der von Google zum Linux-Kernel-TCP-Stack hinzugefügt wird. Mit BBR an Ort und Stelle,

So installieren Sie YOURLS unter CentOS 7

So installieren Sie YOURLS unter CentOS 7

YOURLS (Your Own URL Shortener) ist eine Open-Source-Anwendung zur URL-Verkürzung und Datenanalyse. In diesem Artikel werden wir den Installationsprozess behandeln

So aktivieren Sie TLS 1.3 in Apache unter Fedora 30

So aktivieren Sie TLS 1.3 in Apache unter Fedora 30

Verwenden Sie ein anderes System? TLS 1.3 ist eine Version des TLS-Protokolls (Transport Layer Security), das 2018 als vorgeschlagener Standard in RFC 8446 veröffentlicht wurde

Kann KI mit zunehmender Anzahl von Ransomware-Angriffen kämpfen?

Kann KI mit zunehmender Anzahl von Ransomware-Angriffen kämpfen?

Ransomware-Angriffe nehmen zu, aber kann KI helfen, den neuesten Computervirus zu bekämpfen? Ist KI die Antwort? Lesen Sie hier, ob KI boone oder bane ist

ReactOS: Ist das die Zukunft von Windows?

ReactOS: Ist das die Zukunft von Windows?

ReactOS, ein quelloffenes und kostenloses Betriebssystem, ist hier mit der neuesten Version. Kann es den Anforderungen moderner Windows-Benutzer genügen und Microsoft zu Fall bringen? Lassen Sie uns mehr über dieses alte, aber neuere Betriebssystem erfahren.

Bleiben Sie in Verbindung über die WhatsApp Desktop App 24*7

Bleiben Sie in Verbindung über die WhatsApp Desktop App 24*7

Whatsapp hat endlich die Desktop-App für Mac- und Windows-Benutzer auf den Markt gebracht. Jetzt können Sie ganz einfach von Windows oder Mac auf WhatsApp zugreifen. Verfügbar für Windows 8+ und Mac OS 10.9+

Wie kann KI die Prozessautomatisierung auf die nächste Stufe heben?

Wie kann KI die Prozessautomatisierung auf die nächste Stufe heben?

Lesen Sie dies, um zu erfahren, wie Künstliche Intelligenz bei kleinen Unternehmen beliebt wird und wie sie die Wahrscheinlichkeit erhöht, sie wachsen zu lassen und ihren Konkurrenten einen Vorsprung zu verschaffen.

macOS Catalina 10.15.4 Supplement Update verursacht mehr Probleme als sie zu lösen

macOS Catalina 10.15.4 Supplement Update verursacht mehr Probleme als sie zu lösen

Vor kurzem hat Apple macOS Catalina 10.15.4 als Ergänzungsupdate veröffentlicht, um Probleme zu beheben, aber es scheint, dass das Update mehr Probleme verursacht, die zum Bricking von Mac-Computern führen. Lesen Sie diesen Artikel, um mehr zu erfahren

13 Tools zur kommerziellen Datenextraktion von Big Data

13 Tools zur kommerziellen Datenextraktion von Big Data

13 Tools zur kommerziellen Datenextraktion von Big Data

Was ist ein Journaling-Dateisystem und wie funktioniert es?

Was ist ein Journaling-Dateisystem und wie funktioniert es?

Unser Computer speichert alle Daten in einer organisierten Weise, die als Journaling-Dateisystem bekannt ist. Es ist eine effiziente Methode, die es dem Computer ermöglicht, Dateien zu suchen und anzuzeigen, sobald Sie auf die Suche klicken.https://wethegeek.com/?p=94116&preview=true

Technologische Singularität: Eine ferne Zukunft der menschlichen Zivilisation?

Technologische Singularität: Eine ferne Zukunft der menschlichen Zivilisation?

Da sich die Wissenschaft schnell weiterentwickelt und einen Großteil unserer Bemühungen übernimmt, steigt auch das Risiko, uns einer unerklärlichen Singularität auszusetzen. Lesen Sie, was Singularität für uns bedeuten könnte.

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Der Einfluss künstlicher Intelligenz im Gesundheitswesen 2021

Der Einfluss künstlicher Intelligenz im Gesundheitswesen 2021

KI im Gesundheitswesen hat in den letzten Jahrzehnten große Fortschritte gemacht. Somit wächst die Zukunft der KI im Gesundheitswesen immer noch von Tag zu Tag.