壳管 - 事物的顺序

壳管 - 事物的顺序

因为netcat我的盒子不支持-e,所以netcat手册页给了我这个解决方法:

$ rm -f /tmp/f; mkfifo /tmp/f
$ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

我不明白这是如何工作的。我认为当您尝试cat /tmp/f这样做时,它会被阻止,直到写入某些内容/tmp/f,如果被阻止,命令的其余部分将如何运行?

答案1

管道中的所有命令都是同时开始并同时运行 – 命令 2 不会等待命令 1 退出。相反,管道依赖于读取操作阻塞,直到前一个命令产生一些输出。

例如,的输出 (stdout)cat /tmp/f直接连接到的输入/bin/sh -i;无论何时尝试从其标准输入读取,它将阻塞,直到已经产生了一些输出。


1(几乎直接;cat 的标准输出和 sh 的标准输入与“管道”对象的两端绑定。)

相关内容