最近、/dev/udp
と/dev/tcp
の疑似デバイスについて知りました here 。それらは一部のGNU/Linuxディストリビューションに固有ですか、それとも他のUNIXシステムで見つけられますか?
それらは何らかの方法で標準化されていますか?
これまでのところ、OS X、Arch Linux、CentOSで問題なく使用できました。
これはShellの機能であり、オペレーティングシステムではありません。
したがって、たとえば、シェルとしてksh88
を使用したSolaris 10の場合:
% cat < /dev/tcp/localhost/22
ksh: /dev/tcp/localhost/22: cannot open
ただし、bash
に切り替えた場合:
% bash
bash-3.2$ cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_1.1.5
したがって、bash
は/dev/tcp
を解釈しますが、ksh88は解釈しませんでした。
シェルとしてksh93
を使用したSolaris 11の場合:
% cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_2.2
したがって、使用中のシェルに大きく依存していることがわかります。
アドオンするには、 Bash Infoノード から:
Bashは、次の表に示すように、いくつかのファイル名をリダイレクトで使用するときに特別に処理します。 Bashが実行されているオペレーティングシステムがこれらの特殊ファイルを提供する場合、bashはそれらを使用します。それ以外の場合は、以下で説明する動作で内部的にエミュレートします。
'/ dev/fd/FD' FDが有効な整数の場合、ファイル記述子FDが複製されます。
'/ dev/stdin'ファイル記述子0が重複しています。
'/ dev/stdout'ファイル記述子1が重複しています。
'/ dev/stderr'ファイル記述子2が重複しています。
'/ dev/tcp/Host/PORT' Hostが有効なホスト名またはインターネットアドレスで、PORTが整数のポート番号またはサービス名の場合、Bashは対応するTCPソケットを開こうとします。
'/ dev/udp/Host/PORT' Hostが有効なホスト名またはインターネットアドレスで、PORTが整数のポート番号またはサービス名の場合、Bashは対応するUDPソケットを開こうとします。