我试图弄清楚 bash 脚本文件中一行的含义:
mkfifo mypipe
nc -l 12345 < mypipe | /home/myprogram > mypipe
这是我的理解: nc -l 部分在端口 12345 上创建类似服务器端的行为,该行为从 mypipe 接收输入,将输出通过管道输送到程序,再将程序输出通过管道输送回 mypipe。
我的问题首先是我的分析正确吗?其次,mkfifo到底是什么,它是什么样的文件?我也不明白 nc -l 到底输出什么以便通过管道传输到 myprogram。
感谢您的帮助。
最佳答案
mkfifo
创建一个管道文件。这里,FIFO的意思是“先进先出”。无论一个进程向管道中写入什么内容,第二个进程都可以读取。它不是一个“真正的”文件——数据永远不会保存到磁盘上;但是 Linux 将许多机制抽象为文件,以简化事情。
nc -l 12345
将绑定(bind)到套接字 12345 并监听;当它捕获传入连接时,会将标准输入传递到远程主机,并将远程主机的传入数据传递到标准输出。
因此,这里的架构是:
remote host -> nc -> regular pipe -> myprogram
myprogram -> mypipe -> nc -> remote host
有效地让 myprogram 和远程主机对话,即使 myprogram 被设计为从 stdin 读取并写入 stdout。
由于 bash 管道 (|
) 仅处理一个方向的通信,因此您需要创建一个显式的第二个管道来进行双向进程间连接。
关于Bash 脚本语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8570795/