Bash管道执行

Dav*_*ida 6 bash

netcat联机帮助页指示,如果没有-c和-e选项,可以使用以下命令通过nc为shell提供服务.

$ rm -f /tmp/f; mkfifo /tmp/f
$ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f
Run Code Online (Sandbox Code Playgroud)

现在,根据我的理解,来自fifos的读取和写入都是阻塞操作.例如,如果我跑

$ mkfifo foo
$ cat foo
Run Code Online (Sandbox Code Playgroud)

bash会阻塞,因为没有写入foo.来自nc联机帮助页的示例中的管道如何不阻塞?我假设我误解了管道的执行方式.

Bar*_*mar 7

管道中的所有命令同时运行,而不是顺序运行.所以cat /tmp/f确实会阻止,但/bin/shnc同时出现这种情况仍然会启动.nc当客户端连接到端口并发送命令时,将写入FIFO,这将允许cat解除阻塞.