/ dev / {udp,tcp}是否已标准化或在任何地方都可用?


17

我最近在这里了解了/dev/udp/dev/tcp伪设备。它们是特定于某些GNU / Linux发行版的,还是可以在其他UNIX系统上找到它们?

它们以某种方式标准化了吗?

到目前为止,我已经能够在OS X,Arch Linux和CentOS上成功使用它们。

Answers:


26

这是外壳程序的功能,而不是操作系统的功能。

因此,例如,在Solaris 10上ksh88,将其作为shell:

% 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作为shell上:

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

因此,我们可以看到它非常依赖所使用的外壳。


4
还取决于编译时选项-并非所有bash构建都会启用它。
Charles Duffy

@CharlesDuffy足够真实;ksh也是如此(ksh-88尝试自动检测,但是我不确定它是否正常工作)。
史蒂芬·哈里斯

1
关于第一句话,POSIX确实标准化了一些基本的shell功能(尽管/dev/tcp/...不是其中之一)。
Tanz87 '19

3

要添加,请从Bash Info节点添加

Bash在重定向中使用多个文件名时会特别处理它们,如下表所述。如果运行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套接字。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.