Tôi nghĩ rằng tài liệu Bash có phần sai lệch về chủ đề này. Nhìn vào mã, thậm chí quay lại phiên bản 2.04 nơi giới thiệu chuyển hướng mạng /dev/tcp
và /dev/udp
hoạt động như sau:
- tại thời điểm xây dựng,
configure
tập lệnh sẽ kiểm tra xem các tính năng mạng khác nhau có được hỗ trợ hay không; nếu vậy, nếu chuyển hướng mạng được bật (theo trường hợp mặc định), mã mạng nội bộ được tích hợp sẵn;
- trong thời gian chạy, nếu mã mạng nội bộ được tích hợp
/dev/tcp
và /dev/udp
(theo đúng định dạng) được xử lý nội bộ; mặt khác, một cảnh báo được tạo ra (khác / dev / (tcp | udp) / host / port không được hỗ trợ mà không kết nối mạng) và Bash cố gắng mở đường dẫn đã cho trên hệ thống;
- nếu chuyển hướng mạng được cấu hình, không có gì đặc biệt được thực hiện.
Điều này sôi lên là:
- nếu chuyển hướng mạng được bật:
- nếu kết nối mạng được hỗ trợ trên nền tảng đích
/dev/tcp
và /dev/udp
sẽ luôn được xử lý nội bộ;
- nếu không, Bash sẽ cảnh báo và cố gắng mở tập tin mù một cách mù quáng; nếu hệ thống nào đó hỗ trợ
/dev/(tcp|udp)/host/port
, điều đó sẽ được sử dụng, nếu không thì rất có thể việc chuyển hướng sẽ thất bại;
- nếu chuyển hướng mạng bị vô hiệu hóa, không có xử lý đặc biệt nào được thực hiện; như trên, nếu hệ thống nào đó hỗ trợ
/dev/(tcp|udp)/host/port
, điều đó sẽ được sử dụng, nếu không thì rất có thể việc chuyển hướng sẽ thất bại.
/dev/tcp
không tồn tại trên một số hệ thống, nhưng theo như tôi biết thì không ai hỗ trợ sự trừu tượng giống như Bash. Trên Solaris, /dev/tcp
được sử dụng với ndd
công cụ để truy vấn và thay đổi cấu hình mạng. Trong XTI (cũng xem Nhóm mở nếu bạn là thành viên), t_open
có thể sử dụng chức năng này /dev/tcp
để mở kết nối TCP, nhưng nó không sử dụng thiết lập dựa trên đường dẫn, có cấu trúc dữ liệu riêng để chỉ định máy chủ đích và cổng (và các tham số khác).
/dev
là một tmpfs trên các linux hiện tại và nó nằm trên phân vùng gốc trong các bản cũ hơn. Đây là lý do tại sao nó là không thể hiện nay. Nó có thể được thực hiện dễ dàng với phần mở rộng sysfs hoặc Procfs (cả hai f đều rất linh hoạt và giống nhau (thực sự có lẽ không ai biết tại sao chúng không giống nhau)), không ai làm điều đó ngày hôm nay, nhưng nó có thể được thực hiện trong khoảng 100 dòng mã.