คำตอบ:
นี่เป็นคุณสมบัติของเชลล์ไม่ใช่ระบบปฏิบัติการ
ตัวอย่างเช่นบน Solaris 10 ที่มีksh88
เปลือก:
% 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 ไม่ได้
บน Solaris 11 ที่มีksh93
เปลือก:
% cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_2.2
ดังนั้นเราจะเห็นได้ว่ามันขึ้นอยู่กับการใช้งานของเชลล์
/dev/tcp/...
จะไม่ใช่หนึ่งในนั้น)
หากต้องการเพิ่มจากโหนด Bash Info :
Bash จัดการชื่อไฟล์หลายชื่อเป็นพิเศษเมื่อใช้ในการเปลี่ยนเส้นทางดังที่อธิบายไว้ในตารางต่อไปนี้ หากระบบปฏิบัติการที่ใช้ Bash นั้นมีไฟล์พิเศษเหล่านี้ bash จะใช้มัน มิฉะนั้นจะเลียนแบบพวกเขาภายในด้วยพฤติกรรมที่อธิบายไว้ด้านล่าง
'/ dev / fd / FD' หาก FD เป็นจำนวนเต็มที่ถูกต้องตัวอธิบายไฟล์ FD จะถูกทำซ้ำ
'/ dev / stdin' file descriptor 0 ซ้ำกัน
'/ dev / stdout' file descriptor 1 ซ้ำกัน
'/ dev / stderr' ไฟล์ descriptor 2 ซ้ำกัน
'/ dev / tcp / HOST / PORT' ถ้า HOST เป็นชื่อโฮสต์หรือที่อยู่อินเทอร์เน็ตที่ถูกต้องและ PORT เป็นหมายเลขพอร์ตจำนวนเต็มหรือชื่อบริการ Bash พยายามเปิดซ็อกเก็ต TCP ที่สอดคล้องกัน
'/ dev / udp / HOST / PORT' ถ้า HOST เป็นชื่อโฮสต์หรือที่อยู่อินเทอร์เน็ตที่ถูกต้องและ PORT เป็นหมายเลขพอร์ตจำนวนเต็มหรือชื่อบริการ Bash พยายามเปิดซ็อกเก็ต UDP ที่เกี่ยวข้อง