标签: mkfifo

这个命令是如何工作的?mkfifo /tmp/f; 猫 /tmp/f | /bin/sh -i 2>&1 | | /bin/sh -i 2>&1 | NC -l 1234 > /tmp/f

今天我在阅读nc手册页时偶然发现了这个命令。我知道:

  • mkfifo /tmp/f正在/tmp/f创建命名管道。

  • cat /tmp/f正在打印写入该命名管道的任何内容,并且 的输出cat /tmp/f被通过管道传送到/bin/sh

  • /bin/sh正在交互运行,并且 stderr 被重定向到 stdout。
  • `然后输出通过管道传输到正在侦听端口 1234 的 nc
  • 输出最终再次重定向到命名管道。

运行时,连接到该端口(即 1234)上的远程服务器会打开 shell 提示符,客户端可以执行任意命令。但它是如何运作的呢?

shell cat nc mkfifo

6
推荐指数
1
解决办法
8473
查看次数

为什么模式为 1755 的 mkfifo 不向用户授予读取权限和粘滞位?

我正在创建一个服务器和客户端情况,我想在其中创建一个管道,以便他们可以进行通信。

我在服务器代码中创建了管道 mkfifo("fifo",1755);

  • 1 只有创建的用户和 root 才能删除或重命名它,
  • 7 为用户提供读取、写入和执行权限,以及
  • 5 组和其他组只给他们读和执行。

问题是,稍后在服务器代码中,我打开了 fifo 以从中读取,open("fifo",O_RDONLY);但是当我执行它时,它向我显示了一个拒绝我访问 fifo 的错误。

我去看了管道fifo的权限,它是p-wx--s--t这样说的 :

  • p 代表管道,
  • -表示用户没有阅读。我不知道当我用 7 给它的时候,
  • s组执行有用户。我不知道如果我给了 1 那么它应该给用户和其他人只读取和执行的能力,而其他人没有预期的能力。

我对权限有误解吗?

c permissions mkfifo

6
推荐指数
1
解决办法
1176
查看次数

如何检查文件系统上是否存在命名管道

我尝试使用 -f 标志来测试命名管道是否存在

if [[ ! -f "$fifo" ]]; then
  echo 'There should be a fifo.lock file in the dir.' > /dev/stderr
  return 0;
fi
Run Code Online (Sandbox Code Playgroud)

这个检查似乎不正确。那么也许命名管道不是文件,而是其他东西?

bash test fifo mkfifo

5
推荐指数
1
解决办法
4259
查看次数

使用 FIFO 与临时文件或管道的目的是什么?

来自 APUE

FIFO 可用于在一系列 shell 命令中复制输出流。这可以防止将数据写入中间磁盘文件(类似于使用管道避免中间磁盘文件)。

但是管道只能用于进程之间的线性连接,而 FIFO 有一个名称,因此它可以用于 非线性连接

考虑一个需要处理过滤输入流两次的过程。

mkfifo fifo1
prog3 < fifo1 &
prog1 < infile | tee fifo1 | prog2
Run Code Online (Sandbox Code Playgroud)

我们创建 FIFO,然后在后台启动 prog3,从 FIFO 中读取。然后我们启动 prog1 并使用 tee 将其输入发送到 FIFO 和 prog2。

  1. FIFO 如何“在一系列 shell 命令中复制输出流”?这不是由teeFIFO 来完成的吗?

  2. 在示例中,mkfifo fifo1在当前目录中创建一个文件,并且fifo1似乎可以用常规文件替换。那么FIFO“防止将数据写入中间磁盘文件”的意义何在?

  3. 进程之间的“线性连接”和“非线性连接”是什么意思?FIFO可以用于非线性连接,而管道只能用于进程之间的线性连接是什么意思?

谢谢。

pipe ipc fifo mkfifo

2
推荐指数
1
解决办法
4288
查看次数

标签 统计

mkfifo ×4

fifo ×2

bash ×1

c ×1

cat ×1

ipc ×1

nc ×1

permissions ×1

pipe ×1

shell ×1

test ×1