Sind / dev / {udp, tcp} standardisiert oder überall verfügbar?


17

Ich habe vor kurzem über die /dev/udpund /dev/tcpPseudo-Geräte hier gelernt . Sind sie spezifisch für einige GNU / Linux-Distributionen oder kann ich sie auf anderen Unix-Systemen finden?

Sind sie in irgendeiner Weise standardisiert?

Bisher konnte ich sie erfolgreich unter OS X, Arch Linux und CentOS einsetzen.

Antworten:


26

Dies ist eine Funktion der Shell und nicht des Betriebssystems.

So zum Beispiel unter Solaris 10 mit ksh88als Shell:

% cat < /dev/tcp/localhost/22
ksh: /dev/tcp/localhost/22: cannot open

Wenn wir jedoch wechseln zu bash:

% bash
bash-3.2$ cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_1.1.5

Also bashinterpretiert das /dev/tcpdoch ksh88 nicht.

Unter Solaris 11 mit ksh93als Shell:

% cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_2.2

Wir können also sehen, dass es sehr stark von der verwendeten Shell abhängt.


4
Hängt auch von den Kompilierungsoptionen ab. Nicht für alle Bash-Builds ist dies aktiviert.
Charles Duffy,

@CharlesDuffy Richtig genug; trifft auch auf ksh zu (ksh-88 hat versucht, automatisch zu erkennen, aber ich bin mir nicht sicher, ob es richtig funktioniert hat).
Stephen Harris

1
In Bezug auf den ersten Satz standardisiert POSIX einige grundlegende Shell-Funktionen (auch wenn dies /dev/tcp/...keine davon ist).
Tanz87

3

So fügen Sie über den Knoten "Bash-Info" Folgendes hinzu :

Bash behandelt mehrere Dateinamen, insbesondere wenn sie in Umleitungen verwendet werden, wie in der folgenden Tabelle beschrieben. Wenn das Betriebssystem, auf dem Bash ausgeführt wird, diese speziellen Dateien bereitstellt, verwendet bash sie. Andernfalls werden sie intern mit dem unten beschriebenen Verhalten emuliert.

'/ dev / fd / FD' Wenn FD eine gültige Ganzzahl ist, wird der Dateideskriptor FD dupliziert.

'/ dev / stdin' Dateideskriptor 0 ist dupliziert.

'/ dev / stdout' Dateideskriptor 1 ist dupliziert.

'/ dev / stderr' Dateideskriptor 2 ist dupliziert.

'/ dev / tcp / HOST / PORT' Wenn HOST ein gültiger Hostname oder eine gültige Internetadresse ist und PORT eine ganzzahlige Portnummer oder ein Dienstname, versucht Bash, den entsprechenden TCP-Socket zu öffnen.

'/ dev / udp / HOST / PORT' Wenn HOST ein gültiger Hostname oder eine gültige Internetadresse ist und PORT eine ganzzahlige Portnummer oder ein Dienstname, versucht Bash, den entsprechenden UDP-Socket zu öffnen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.