Được / dev / {udp, tcp} được chuẩn hóa hoặc có sẵn ở mọi nơi?


17

Gần đây tôi đã tìm hiểu về các thiết bị giả /dev/udpở đây . Chúng có đặc trưng cho một số bản phân phối GNU / Linux không hoặc tôi có thể tìm thấy chúng trên các hệ thống unix khác không?/dev/tcp

Họ có được tiêu chuẩn hóa theo một cách nào đó?

Cho đến nay, tôi đã có thể sử dụng chúng thành công trên OS X, Arch Linux và CentOS.

Câu trả lời:


26

Đây là một tính năng của shell chứ không phải hệ điều hành.

Vì vậy, ví dụ, trên Solaris 10 với ksh88vỏ như:

% cat < /dev/tcp/localhost/22
ksh: /dev/tcp/localhost/22: cannot open

Tuy nhiên nếu chúng ta chuyển sang bash:

% bash
bash-3.2$ cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_1.1.5

Vì vậy, bashgiải thích /dev/tcpnhưng ksh88 đã không.

Trên Solaris 11 với ksh93vỏ như:

% cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_2.2

Vì vậy, chúng ta có thể thấy nó rất phụ thuộc vào vỏ đang sử dụng.


4
Cũng phụ thuộc vào các tùy chọn thời gian biên dịch - không phải tất cả các bản dựng bash sẽ kích hoạt nó.
Charles Duffy

@CharlesDuffy Đúng vậy; cũng đúng với ksh (ksh-88 đã cố gắng tự động phát hiện, nhưng tôi không chắc nó hoạt động tốt).
Stephen Harris

1
Về câu đầu tiên, POSIX không chuẩn hóa một số tính năng cơ bản của vỏ (mặc dù /dev/tcp/...không phải là một trong số đó).
Tanzania87

3

Để thêm vào, từ nút Bash Info :

Bash xử lý một số tên tệp đặc biệt khi chúng được sử dụng trong các chuyển hướng, như được mô tả trong bảng sau. 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ộ với hành vi được mô tả dưới đây.

'/ dev / fd / FD' Nếu FD là số nguyên hợp lệ, bộ mô tả tệp FD được sao chép.

'/ dev / stdin' Bộ mô tả tệp 0 được sao chép.

'/ dev / stdout' Mô tả tệp 1 được sao chép.

'/ dev / stderr' Mô tả tệp 2 được sao chép.

'/ dev / tcp / HOST / PORT' Nếu HOST là tên máy chủ hoặc địa chỉ Internet hợp lệ và PORT là số cổng hoặc tên dịch vụ số nguyên, Bash cố gắng mở ổ cắm TCP tương ứng.

'/ dev / udp / HOST / PORT' Nếu HOST là tên máy chủ hoặc địa chỉ Internet hợp lệ và PORT là số cổng hoặc tên dịch vụ số nguyên, Bash cố gắng mở ổ cắm UDP tương ứng.

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.