Czy / dev / {udp, tcp} jest znormalizowany lub dostępny wszędzie?

17

I niedawno dowiedział się o /dev/udpi /dev/tcppseudo urządzeń tutaj . Czy są specyficzne dla niektórych dystrybucji GNU / Linux, czy mogę je znaleźć w innych systemach uniksowych?

Czy są w jakiś sposób znormalizowane?

Do tej pory mogłem z powodzeniem ich używać w systemach OS X, Arch Linux i CentOS.

Antoine
źródło

Odpowiedzi:

26

Jest to funkcja powłoki, a nie systemu operacyjnego.

Na przykład ksh88w systemie Solaris 10 z powłoką:

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

Jeśli jednak przejdziemy na bash:

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

Więc bashinterpretuje, /dev/tcpale ksh88 nie.

W ksh93systemie Solaris 11 z powłoką:

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

Widzimy więc, że jest to bardzo zależne od używanej powłoki.

Stephen Harris
źródło
4
Zależy również od opcji czasu kompilacji - nie wszystkie kompilacje bash będą go miały włączone.
Charles Duffy,
@CharlesDuffy Wystarczająco prawda; dotyczy to także ksh (ksh-88 próbował automatycznie wykryć, ale nie jestem pewien, czy działał poprawnie).
Stephen Harris
1
Jeśli chodzi o pierwsze zdanie, POSIX standaryzuje niektóre podstawowe funkcje powłoki (choć /dev/tcp/...nie jest to jedna z nich).
Tanz87
3

Aby dodać, z węzła Bash Info :

Bash obsługuje kilka nazw plików, zwłaszcza gdy są one używane w przekierowaniach, jak opisano w poniższej tabeli. Jeśli system operacyjny, na którym działa Bash, zapewnia te specjalne pliki, bash ich użyje; w przeciwnym razie naśladuje je wewnętrznie za pomocą zachowania opisanego poniżej.

'/ dev / fd / FD' Jeśli FD jest prawidłową liczbą całkowitą, deskryptor pliku FD jest duplikowany.

'/ dev / stdin' Deskryptor pliku 0 jest zduplikowany.

'/ dev / stdout' Deskryptor pliku 1 jest zduplikowany.

'/ dev / stderr' Deskryptor pliku 2 jest zduplikowany.

'/ dev / tcp / HOST / PORT' Jeśli HOST jest prawidłową nazwą hosta lub adresem internetowym, a PORT jest liczbą całkowitą portu lub nazwą usługi, Bash próbuje otworzyć odpowiednie gniazdo TCP.

'/ dev / udp / HOST / PORT' Jeśli HOST jest prawidłową nazwą hosta lub adresem internetowym, a PORT jest liczbą całkowitą portu lub nazwą usługi, Bash próbuje otworzyć odpowiednie gniazdo UDP.

extremeaxe5
źródło