私は/dev/tcp/<host>/<port>
これがリダイレクトのいくつかのシェルによって排他的に処理されるマジックパスであることを知っています。しかしによるとman bash
:
bashを実行しているオペレーティングシステムがこれらの特殊ファイルを提供している場合、bashはそのファイルを使用します。それ以外の場合は、内部的にそのファイルをエミュレートします。
現在使用しているLinuxシステムには/dev/tcp
特別なファイルが存在しないため、Bashはシミュレーションそれ。しかし、実際に/dev/tcp
Bashがサポートするのと同じ意味を持つ特別なファイルを提供するUnixのようなシステムは本当にありますか?
答え1
私はBash文書がこのトピックについて少し誤解を招くと思います。コードを見ると、バージョン2.04に戻ってもネットワークリダイレクトが導入され、次のように/dev/tcp
動作します。/dev/udp
- ビルド時に
configure
スクリプトは、さまざまなネットワーキング機能がサポートされていることを確認します。サポートされている場合、ネットワークリダイレクトが有効になっていると、内部ネットワーキングコードが組み込まれます(デフォルト)。 - 実行時に内部ネットワークコードが組み込まれている場合は、内部的に(正しい形式で)処理され
/dev/tcp
ます/dev/udp
。それ以外の場合は警告が生成されます("/dev/(tcp | udp)/ host / portはネットワーキングなしでサポートされていません。"))、Bashはシステムで指定されたパスを開こうとします。 - ネットワークリダイレクトが設定されている場合、特別な操作は行われません。
これは次のように要約されます。
- ネットワークリダイレクトが有効になっている場合:
- ターゲットプラットフォームがネットワーキングをサポートし、
/dev/tcp
常に/dev/udp
内部的に処理されるかどうか。 - それ以外の場合、Bashは警告を表示し、「盲目的に」ファイルを開こうとします。システムが何らかの方法でそれをサポートすると、その
/dev/(tcp|udp)/host/port
ファイルが使用されます。そうしないと、リダイレクトが失敗する可能性が高くなります。
- ターゲットプラットフォームがネットワーキングをサポートし、
- ネットワークリダイレクトが無効になっている場合、上記のように特別な処理は行われません。システムが何らかの方法でそれをサポートするときに
/dev/(tcp|udp)/host/port
使用されます。そうしないと、リダイレクトが失敗する可能性が高くなります。
/dev/tcp
一部のシステムには存在しますが、私が知っている限り、Bashと同じ抽象化をサポートするシステムはありません。 Solarisは、ネットワーク構成を照会および変更するための/dev/tcp
ツールと共に使用されます。ndd
存在するXTI(あなたも見ることができますグループを開くメンバーの場合)このt_open
機能を使用して/dev/tcp
TCP接続を開くことができますが、パスベースの設定を使用せず、ターゲットホストとポート(他のパラメータのうち)を指定する別のデータ構造があります。