Unix-Sockets sind eine der Kommunikationsformen zwischen Prozessen, die unter Linux am häufigsten verwendet werden. Aus diesem Grund ist es bei der Diagnose oft sehr nützlich , offene oder empfangsbereite Unix-Sockets abzurufen .
Dies ist das Ziel dieses Tutorials, in dem erklärt wird, wie eine Liste mit allen offenen Unix-Sockets erstellt wird. Dazu benötigen wir nur Zugriff auf das Linux-Terminal.
So öffnen Sie Unix-Sockets unter Linux über die Konsole.
Ich weiß, dass viele von Ihnen die Unix-Sockets bereits genau kennen und nur daran interessiert sind, wie man sie auflistet. Daher zeige ich Ihnen zunächst den Befehl, den wir verwenden werden, und erkläre dann kurz die verschiedenen Konzepte für diejenigen, die neu in der Welt der Unix-Sockets sind.
Befehl zum Auflisten der im System geöffneten Unix-Sockets:
netstat -xl
zeokat@ubuntu:~$ sudo netstat -xl Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 16209 public/flush unix 2 [ ACC ] STREAM LISTENING 10818 /run/systemd/private unix 2 [ ACC ] STREAM LISTENING 10822 /run/systemd/fsck.progress unix 2 [ ACC ] STREAM LISTENING 16436 /run/user/1000/systemd/private unix 2 [ ACC ] SEQPACKET LISTENING 10833 /run/udev/control unix 2 [ ACC ] STREAM LISTENING 16218 private/smtp unix 2 [ ACC ] STREAM LISTENING 10836 /run/systemd/journal/stdout unix 2 [ ACC ] STREAM LISTENING 16221 private/relay unix 2 [ ACC ] STREAM LISTENING 16224 public/showq unix 2 [ ACC ] STREAM LISTENING 16184 public/cleanup unix 2 [ ACC ] STREAM LISTENING 16180 public/pickup unix 2 [ ACC ] STREAM LISTENING 16187 public/qmgr unix 2 [ ACC ] STREAM LISTENING 15597 /var/run/mysqld/mysqld.sock unix 2 [ ACC ] STREAM LISTENING 16251 private/maildrop unix 2 [ ACC ] STREAM LISTENING 16254 private/uucp unix 2 [ ACC ] STREAM LISTENING 16257 private/ifmail unix 2 [ ACC ] STREAM LISTENING 16260 private/bsmtp unix 2 [ ACC ] STREAM LISTENING 16263 private/scalemail-backend unix 2 [ ACC ] STREAM LISTENING 13362 /run/uuidd/request unix 2 [ ACC ] STREAM LISTENING 13363 /var/run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 16266 private/mailman
Die Erklärung des Befehls ist sehr einfach. Wir verwenden das Tool netstat mit den folgenden Optionen:
-
x
: Filtert die Liste so, dass nur Unix-Sockets angezeigt werden. -
l
: zeigt nur die empfangsbereiten Sockets an, auch Server genannt.
Manchmal ist es interessant, die PID des Prozesses oder Programms zu kennen, dem der Socket gehört. Dazu müssen wir nur die Option -p
hinzufügen, damit der Befehl lautet:
sudo netstat -xlp
zeokat@ubuntu:~$ sudo netstat -xlp Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] STREAM LISTENING 16209 1224/master public/flush unix 2 [ ACC ] STREAM LISTENING 10818 1/init /run/systemd/private unix 2 [ ACC ] STREAM LISTENING 10822 1/init /run/systemd/fsck.progress unix 2 [ ACC ] STREAM LISTENING 16436 1233/systemd /run/user/1000/systemd/private unix 2 [ ACC ] SEQPACKET LISTENING 10833 1/init /run/udev/control unix 2 [ ACC ] STREAM LISTENING 16218 1224/master private/smtp unix 2 [ ACC ] STREAM LISTENING 10836 1/init /run/systemd/journal/stdout unix 2 [ ACC ] STREAM LISTENING 16221 1224/master private/relay unix 2 [ ACC ] STREAM LISTENING 16224 1224/master public/showq unix 2 [ ACC ] STREAM LISTENING 16184 1224/master public/cleanup unix 2 [ ACC ] STREAM LISTENING 16180 1224/master public/pickup unix 2 [ ACC ] STREAM LISTENING 16187 1224/master public/qmgr unix 2 [ ACC ] STREAM LISTENING 15597 1031/mysqld /var/run/mysqld/mysqld.sock unix 2 [ ACC ] STREAM LISTENING 16251 1224/master private/maildrop unix 2 [ ACC ] STREAM LISTENING 16254 1224/master private/uucp unix 2 [ ACC ] STREAM LISTENING 16257 1224/master private/ifmail unix 2 [ ACC ] STREAM LISTENING 16260 1224/master private/bsmtp unix 2 [ ACC ] STREAM LISTENING 16263 1224/master private/scalemail-backend unix 2 [ ACC ] STREAM LISTENING 13362 1/init /run/uuidd/request unix 2 [ ACC ] STREAM LISTENING 13363 1/init /var/run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 16266 1224/master private/mailman
In diesem Fall habe ich sudo verwendet, um den Befehl auszuführen, aber wir haben sicherlich nicht genügend Berechtigungen, um alle PIDs anzuzeigen.
Einführung in Unix-Sockets.
Um einen tieferen Einblick in die Welt der Unix-Sockets zu erhalten , versuchen wir, eine einfache und erschwingliche Erklärung abzugeben. Dazu müssen wir zunächst erklären, was ein Socket ist, und es könnte als abstrakte Methode definiert werden, die den Datenfluss ermöglicht . Im Allgemeinen ist das Konzept der Buchse mit dem eines Steckers verbunden, der zwei Programme kontaktiert.
Jetzt können wir als Unix-Socket eine Methode definieren, die die Kommunikation zwischen zwei Prozessen desselben Geräts ermöglicht . Mit anderen Worten, es ermöglicht den ordnungsgemäßen und zuverlässigen Datenfluss zwischen den beiden Prozessen innerhalb des Betriebssystems.
Die Kommunikation kann bidirektional sein, wenn sogenannte Stream-Sockets verwendet werden, und unidirektional, wenn Datagramm-Sockets verwendet werden.
Eine sehr wichtige Besonderheit von UNIX-Sockets ist, dass sie das Dateisystem als Namespace-Adresse verwenden , sodass ein UNIX-Socket anhand seines Pfadnamens identifiziert wird. Auf diese Weise können wir das Dateiberechtigungskontrollsystem verwenden und diese zusammen mit dem Socket zum Festlegen von Berechtigungen verwenden.
Schließlich schlage ich als Beispiel einen UNIX-Socket vor, wenn wir einen Nginx- oder Apache- Server mit PHP-FPM konfigurieren, wobei wir normalerweise einen Socket für den Server und das PHP-Verarbeitungsmodul zur Kommunikation verwenden.