$ ls -l /dev/stdin /dev/fd/0
lrwx------ 1 tim tim 64 2011-08-07 09:53 /dev/fd/0 -> /dev/pts/2
lrwxrwxrwx 1 root root 15 2011-08-06 08:14 /dev/stdin -> /proc/self/fd/0
$ ls -l /dev/pts/2 /proc/self/fd/0
crw--w---- 1 tim tty 136, 2 2011-08-07 09:54 /dev/pts/2
lrwx------ 1 tim tim 64 2011-08-07 09:54 /proc/self/fd/0 -> /dev/pts/2
Run Code Online (Sandbox Code Playgroud)
/dev及其子目录下的所有文件都是设备的文件描述符?/dev/fd/0、
/dev/stdin、/proc/self/fd/0都是指向 的链接/dev/pts/2。lin lrwx------mean link,cincrw--w----
是什么意思?我在看一本书,上面写着:
每个进程至少有三个可用的通信通道:“标准输入”(STDIN)、“标准输出”(STDOUT)和“标准错误”(STDERR)。
大多数命令接受来自 STDIN 的输入并将其输出写入 STDOUT。他们将错误消息写入 STDERR。此约定允许您像构建块一样将命令串在一起以创建复合管道。
Shell 将符号
<、>和解释>>为将命令的输入或输出重新路由到文件或从文件重新路由的指令。要将一个命令的 STDOUT 连接到另一个命令的 STDIN,请使用
|通常称为管道的符号。Run Code Online (Sandbox Code Playgroud)ps -ef | grep httpd
所以基本上这就是说标准输入是一个允许用户写入文件的命令,而标准输出是一个命令让 bash shell 将输出写入 shell,而标准错误就像输出一样,但它只是当文件系统出现错误时调用。然后我们到了连接 STDOUT 和 STDIN 的部分,我迷路了。
在这个答案中,在最底部,Gilles 提到一个命令可以有多个输出或输入。
是的,有cat foo bar | something, 用于将foo和bar作为输入,还有tee用于输出;但这似乎并不是他真正要说的。
一个程序怎么会有多个输入或输出?