/ dev / {udp, tcp} เป็นมาตรฐานหรือมีอยู่ทุกที่หรือไม่?


17

ฉันได้เรียนรู้เมื่อเร็ว ๆ นี้เกี่ยวกับ/dev/udpและ/dev/tcpหลอกอุปกรณ์ที่นี่ พวกมันจำเพาะเจาะจงกับ GNU / Linux ดิสทริบิวชันหรือฉันสามารถหามันในระบบยูนิกซ์อื่น ๆ ได้หรือไม่?

พวกเขามีมาตรฐานในบางวิธี?

จนถึงตอนนี้ฉันสามารถใช้พวกมันสำเร็จบน OS X, Arch Linux และ CentOS

คำตอบ:


26

นี่เป็นคุณสมบัติของเชลล์ไม่ใช่ระบบปฏิบัติการ

ตัวอย่างเช่นบน 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

ดังนั้นเราจะเห็นได้ว่ามันขึ้นอยู่กับการใช้งานของเชลล์


4
นอกจากนี้ยังขึ้นอยู่กับตัวเลือกเวลาในการคอมไพล์ด้วยเช่นกันไม่ได้มีการเปิดใช้งานการสร้าง bash ทั้งหมด
Charles Duffy

@CharlesDuffy จริงพอ; ก็เป็นจริงของ ksh (ksh-88 พยายามตรวจจับอัตโนมัติ แต่ฉันไม่แน่ใจว่ามันทำงานได้อย่างถูกต้อง)
Stephen Harris

1
เกี่ยวกับประโยคแรกPOSIX ทำมาตรฐานคุณสมบัติเปลือกบางอย่างพื้นฐาน (แม้ว่า/dev/tcp/...จะไม่ใช่หนึ่งในนั้น)
Tanz87

3

หากต้องการเพิ่มจากโหนด 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 ที่เกี่ยวข้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.