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

lsof :Am häufigsten verwendete Beispiele

Der Befehl lsof listet geöffnete Dateien, Sockets und Pipes auf. Sie können den Befehl lsof verwenden, um zu sehen, welche Dateien offen gehalten werden (z. B. Bibliotheken oder Protokolldateien) und auf welche Ports Daemons hören. Sie können mit dem Befehl lsof nach geöffneten Dateien suchen. lsof sollte als Superuser (root) ausgeführt werden, um alle geöffneten Dateien zu sehen. Wenn es ohne Argumente/Optionen verwendet wird, listet lsof alle offenen Dateien für die derzeit aktiven Prozesse auf.

# lsof
COMMAND     PID   USER   FD      TYPE             DEVICE    SIZE/OFF       NODE NAME
init          1   root  cwd       DIR              253,0        4096          2 /
init          1   root  rtd       DIR              253,0        4096          2 /
init          1   root  txt       REG              253,0      150352    4587561 /sbin/init (deleted)
init          1   root  DEL       REG              253,0                4849693 /lib64/libnss_files-2.12.so
..........

Ausgabe des „lsof“-Befehls verstehen:

COMMAND: Command using the file.
PID: PID of the file
USER: Owner of the file
FD: File descriptor. Different flags of File descriptor are as below:

#    :  The number in front of flag(s) is the file descriptor number used by the process to associate with the file
u    :  File open with Read and Write permission
r    :  File open with Read permission
w    :  File open with Write permission
W    :  File open with Write permission and with Write Lock on entire file
mem  :   Memory mapped file, usually for shared library

TYPE: File type. Different flags of File type are as below:
REG - Regular file
DIR - Directory

DEVICE: major, minor number of the device where file resides.
SIZE/OFF: File size
NODE: inode number
NAME: File name

Geöffnete Dateien unter einem Einhängepunkt finden

Geöffnete Dateien in einem bestimmten Verzeichnis können mit lsof gefunden werden. Öffnen Sie zum Beispiel eine Textdatei (nicht schließen – offen lassen) in einem Verzeichnis zum Bearbeiten mit vi und überprüfen Sie die lsof-Ausgabe in diesem Verzeichnis in einer anderen Sitzung.

# cd /test
# vi a.txt

Suchen Sie in einer anderen Sitzung nach der lsof-Ausgabe in diesem Verzeichnis:

# lsof /test
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    2972 root  cwd    DIR  253,0     4096 262145 /test
vi      3012 root  cwd    DIR  253,0     4096 262145 /test

Dies kann auch verwendet werden, um den beschäftigten Einhängepunkt auszuhängen. Prozesse, die den Einhängepunkt beschäftigt halten, können mit lsof.

gefunden werden

Informationen zu bestimmten Prozessen suchen

Verwenden Sie für weitere Informationen zu einem bestimmten Prozess die Option -p für lsof:

# lsof -p 8797

Zuhöradressen anzeigen

Daemons können sich entweder an die globale IPv4-Adresse 0.0.0.0 oder an bestimmte Adressen wie 127.0.0.1 (localhost) binden. Ein an die localhost-Adresse gebundener Daemon ist nur vom System selbst aus erreichbar. Verwenden Sie die Optionen -i und -nP für lsof, um Listening-Ports ohne Suchen nach Hostnamen und Diensten anzuzeigen. Das folgende Beispiel zeigt den Apache httpd-Daemon, der auf localhost am nicht standardmäßigen Port 7777 ausgeführt wird. Andere Systeme können sich nicht mit diesen httpd-Prozessen verbinden:gut für die Sicherheit, schlecht für die Remote-Konnektivität.

Beispiel:

# lsof -i -nP | grep httpd
httpd 8616 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN)
httpd 8614 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN)
httpd 8623 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN)

Beispiel:
Im Gegensatz dazu akzeptiert der folgende OpenSSH-sshd-Prozess Verbindungen von anderen Systemen, da er an die Adresse 0.0.0.0 gebunden ist, was durch das * vor der Portnummer angezeigt wird.

# lsof -i -P | grep sshd
sshd 4341 root 3u IPv4 46438 TCP *:22 (LISTEN)

Bestimmte Anwendungen lauschen auf vielen verschiedenen Ports, wie z. B. der Berkeley Internet Name Daemon (BIND) namens Daemon, Version 9.

Beispiel:

# lsof -i -nP | grep ^named
named 9865 named 5u IPv6 0x03348be0 0t0 UDP *:53
named 9865 named 6u IPv6 0x0566re80 0t0 TCP *:53 (LISTEN)
named 9865 named 7u IPv4 0x03456b10 0t0 UDP 127.0.0.1:53
named 9865 named 8u IPv4 0x01870570 0t0 TCP 127.0.0.1:53 (LISTEN)
named 9865 named 9u IPv4 0x03456a40 0t0 UDP *:49164
named 9865 named 10u IPv6 0x03456970 0t0 UDP *:49165
named 8888 named 11u IPv4 0x0186fd54 0t0 TCP *:953 (LISTEN)
named 8888 named 13u IPv4 0x01387ee0 0t0 UDP 168.1.863.1:67
named 8888 named 14u IPv4 0x099899ce4 0t0 TCP 168.1.863.1:67(LISTEN)

Dateien finden, die von einem Prozess geöffnet wurden

Ein Prozess funktioniert möglicherweise aus anderen Gründen nicht, z. B. einer Firewall, einer Zugriffsdienststeuerung wie tcp_wrappers oder einer anderen Fehlkonfiguration. Verwenden Sie ping, telnet oder nmap, um von einem entfernten System aus zu überprüfen, ob möglicherweise etwas anderes die Anfrage blockiert, oder führen Sie tcpdump aus, um zu sehen, ob Verbindungen das Quellsystem verlassen oder das Zielsystem erreichen.

Beispiel
Um zu sehen, welche Dateien von Prozessen geöffnet werden, deren Namen mit „t“ (telnetd…) und bash beginnen. Und um zu sehen, welche Dateien von init geöffnet werden, verwenden Sie die folgenden Befehle:

# lsof -c t
# lsof -c bash
# lsof -c init

Beispiel
Um zu sehen, welche Dateien von Prozessen geöffnet werden, deren Namen mit „testuser“ beginnen, aber diejenigen auszuschließen, deren Eigentümer der Benutzer „tom“ ist, verwenden Sie den folgenden Befehl:

# lsof -c testuser -u ^tom

Von Benutzern geöffnete Prozesse finden

Um zu sehen, welche Prozesse von den Benutzern myuser und tom geöffnet werden, verwenden Sie den folgenden Befehl:

# lsof -u myuser,tom

Durch Prozess verwendeten Port finden

Verwenden Sie den folgenden Befehl, um zu sehen, welche Prozesse einen bestimmten Port verwenden:

# lsof -i TCP:389

Wie finde ich die Anzahl offener Dateien für einen Prozessnamen und Prozess-PID, sortiert nach Anzahl offener Dateien?

Dies kann interessant sein, wenn der Fehler „zu viele offene Dateien“ auftritt. Verwenden Sie das folgende Skript, das den Befehl lsof verwendet:

# lsof | perl -lane '$x{"$F[0]:$F[1]"}++;END { print "$x{$_}\t$_" for sort {$x{$a}<=>$x{$b}} keys %x}'

Prozesse mit Max File Descriptors finden

Grenzwerte für Dateideskriptoren können mit dem folgenden Befehl für eine Shell gesetzt werden:

# ulimit -n 65536

Verwenden Sie den Befehl „lsof“, um herauszufinden, was die Dateideskriptoren auf dem System verwendet.

# lsof -g | awk '{print $2}' | sort -u > /tmp/lsof_sort.txt
# for var in `cat /tmp/lsof_sort.txt` 
do 
	echo `echo "$var ---- "``grep -x $var /tmp/lsof.txt | wc -l` 
done

Dadurch werden alle Prozesse und die entsprechende Anzahl der von ihnen geöffneten Dateien aufgelistet. Sie können die Prozesse mit den meisten geöffneten Dateien auswählen und sehen, welche das sind.


Linux
  1. N häufigste Wörter in einer Datei finden?

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

  3. Beispiele für Linux-Tail-Befehle

  4. Subversion-Tutorial:10 am häufigsten verwendete SVN-Befehle mit Beispielen

  5. 25 am häufigsten verwendete Beispiele für Linux-IPTables-Regeln

Linux-WC-Befehl mit Beispielen

35 Bash-Skriptbeispiele

Linux cat-Befehlsbeispiele

Linux gzip-Befehlsbeispiele

dumpe2fs-Befehlsbeispiele in Linux

fsck-Befehlsbeispiele unter Linux