“保持管道畅通”是什么意思?

“保持管道畅通”是什么意思?

我一直在关注 Linux 应用程序的各种漏洞利用练习的演练。我很好地理解这些内容,但是有些人提到使用 cat 来“保持管道打开”,例如这里

例如:

(python2 exploit.py ; cat) | ./programToExploit

在实践中“保持管道打开”实际上意味着什么,以及如何像上面的命令一样保持管道打开?

答案1

查看之间的区别

echo 'ls' | sh -s

( echo 'ls'; cat ) | sh -s

或者,

{ echo 'ls'; cat; } | sh -s

在这里,sh -s将启动一个 shell 会话,从标准输入 ( ) 读取要执行的命令-s

在第一个示例中,shell 将执行ls并退出(因为没有更多输入)。

在第二个和第三个示例中,shell 将执行ls并等待,直到没有更多输入。输入流sh -s首先由命令生成echo,但随后cat接管。该cat进程将从父 shell 会话中读取数据,并通过管道将命令传递到sh -s.如果您键入ls或任何其他命令(不会出现键入提示),shell 将执行这些命令。

这将持续下去,直到您通过按空行来表示输入结束来终止该cat过程。Ctrl+D

我相信这就是你所说的“保持管道畅通”的意思。

相关内容