Est-ce que / dev / {udp, tcp} est standardisé ou disponible partout?

17

J'ai récemment appris au sujet de la /dev/udpet /dev/tcppseudo-dispositifs ici . Sont-ils spécifiques à certaines distributions GNU / Linux ou puis-je les trouver sur d'autres systèmes Unix?

Sont-ils normalisés d'une manière ou d'une autre?

Jusqu'à présent, j'ai pu les utiliser avec succès sur OS X, Arch Linux et CentOS.

Antoine
la source

Réponses:

26

Il s'agit d'une fonction du shell et non du système d'exploitation.

Ainsi, par exemple, sur Solaris 10 avec ksh88comme shell:

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

Cependant, si nous passons à bash:

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

bashInterprète donc le /dev/tcpksh88 mais pas.

Sous Solaris 11 avec ksh93comme shell:

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

Nous pouvons donc voir que cela dépend beaucoup du shell utilisé.

Stephen Harris
la source
4
Dépend également des options de compilation - toutes les versions bash ne seront pas activées.
Charles Duffy, du
@CharlesDuffy C'est vrai; également vrai pour ksh (ksh-88 a essayé de détecter automatiquement, mais je ne suis pas sûr que cela fonctionne correctement).
Stephen Harris
1
En ce qui concerne la première phrase, POSIX standardise certaines fonctionnalités de base du shell (mais /dev/tcp/...n'en fait pas partie).
Tanz87
3

Pour ajouter, à partir du nœud Bash Info :

Bash gère plusieurs noms de fichiers spécialement lorsqu'ils sont utilisés dans des redirections, comme décrit dans le tableau suivant. Si le système d'exploitation sur lequel Bash s'exécute fournit ces fichiers spéciaux, bash les utilisera; sinon, il les émulera en interne avec le comportement décrit ci-dessous.

'/ dev / fd / FD' Si FD est un entier valide, le descripteur de fichier FD est dupliqué.

'/ dev / stdin' Le descripteur de fichier 0 est dupliqué.

'/ dev / stdout' Le descripteur de fichier 1 est dupliqué.

'/ dev / stderr' Le descripteur de fichier 2 est dupliqué.

'/ dev / tcp / HOST / PORT' Si HOST est un nom d'hôte ou une adresse Internet valide, et PORT est un numéro de port entier ou un nom de service, Bash tente d'ouvrir le socket TCP correspondant.

'/ dev / udp / HOST / PORT' Si HOST est un nom d'hôte ou une adresse Internet valide, et PORT est un numéro de port ou un nom de service entier, Bash tente d'ouvrir le socket UDP correspondant.

extremeaxe5
la source