Devices

/dev/{udp,tcp} 是否標準化或隨處可用?

  • April 18, 2019

我最近在這裡/dev/udp了解了和/dev/tcp偽設備。它們是特定於某些 GNU/Linux 發行版的,還是我可以在其他 unix 系統上找到它們?

它們是否以某種方式標準化?

到目前為止,我已經能夠在 OS X、Arch Linux 和 CentOS 上成功使用它們。

這是shell的一個特性,而不是作業系統的特性。

因此,例如,在帶有ksh88shell 的 Solaris 10 上:

% 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 沒有。

ksh93在帶有shell 的Solaris 11 上:

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

所以我們可以看到它非常依賴於使用的shell。

要添加,請從Bash Info 節點

Bash 在重定向中使用時會專門處理多個文件名,如下表所述。如果執行 Bash 的作業系統提供了這些特殊文件,則 bash 將使用它們;否則它將使用下面描述的行為在內部模擬它們。

‘/dev/fd/FD’ 如果 FD 是有效整數,則文件描述符 FD 是重複的。

‘/dev/stdin’ 文件描述符 0 重複。

‘/dev/stdout’ 文件描述符 1 重複。

‘/dev/stderr’ 文件描述符 2 重複。

‘/dev/tcp/HOST/PORT’ 如果 HOST 是有效的主機名或 Internet 地址,並且 PORT 是整數埠號或服務名,Bash 會嘗試打開相應的 TCP 套接字。

‘/dev/udp/HOST/PORT’ 如果 HOST 是有效的主機名或 Internet 地址,並且 PORT 是整數埠號或服務名,Bash 會嘗試打開相應的 UDP 套接字。

引用自:https://unix.stackexchange.com/questions/311095