Hệ thống nào giống Unix thực sự cung cấp tệp đặc biệt / dev / tcp?


9

Tôi biết /dev/tcp/<host>/<port>là một con đường ma thuật được xử lý đặc biệt bởi một số đạn pháo trong các chuyển hướng. Nhưng theo man bash:

Nếu hệ điều hành mà bash đang chạy cung cấp các tệp đặc biệt này, bash sẽ sử dụng chúng; nếu không, nó sẽ mô phỏng chúng trong nội bộ [...]

Trên hộp Linux tôi đang sử dụng ngay bây giờ, /dev/tcptệp đặc biệt không có, vì vậy Bash sẽ mô phỏng nó. Nhưng, có thực sự có một hệ thống giống Unix cung cấp /dev/tcptệp đặc biệt có cùng ngữ nghĩa với hệ thống được Bash hỗ trợ không?


Nó sẽ yêu cầu một thư mục mô phỏng. Việc tạo các thư mục mô phỏng chỉ có thể với các hệ thống tệp cụ thể, ví dụ: Procfs hoặc sysfs có thể làm điều đó. /devlà 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ã.
peterh - Phục hồi Monica

Nhưng có hệ điều hành nào khác không? Tại một số thời điểm, tôi nghĩ rằng Kế hoạch 9 đã làm điều đó nhưng tôi đã sai.
Sylvain Leroux

1
Tôi không biết, có lẽ là không (theo như tôi biết, đó là một phát minh bash). Tôi đã bỏ phiếu cho câu hỏi của bạn, bởi vì câu trả lời cũng thú vị với tôi. Theo tôi biết, không có HĐH unix có khả năng x86 phổ biến nào có thể làm được điều này.
peterh - Phục hồi Monica

Câu trả lời:


8

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/dev/udphoạt động như sau:

  • tại thời điểm xây dựng, configuretậ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/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/dev/udpsẽ 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/tcpkhô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 nddcô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_opencó 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).


Tính năng này đến từ ksh93. / dev / tcp trên các hệ thống SysV sẽ là một phần xử lý trên mô-đun STREAM tcp.
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.