哪个进程/程序创建/写入 I/O 重定向到的文件?

哪个进程/程序创建/写入 I/O 重定向到的文件?

在学习SELinux时,我在目录semanage fcontext -l > fcontext.txt下执行/root将大量fcontext信息转储到文件中。有趣的结果是:fcontext.txt被创建了,但是它的大小是0。

我问在#fedora-selinuxIRC 频道,Fedora QA 告诉我尝试将 SELinux 上下文的类型更改fcontext.txtsemanage_tmp_t.终于起作用了。

但仍然让我困惑的是:

哪个进程/程序创建/写入标准输出到重定向文件? (以便 SELinux 目标策略应用于该进程/程序)

  • bash 外壳?/bin/bash
  • 或semanage(它是一个python脚本)?/usr/sbin/semanage
  • 或解释器 - python ?/usr/bin/python

我认为应该是 bash shell,因为 I/O 重定向是由 shell 控制的(对吗?),而不是程序本身。所以semanage/python没有直接创建文件。

答案1

你是对的:输入和输出流的重定向是由 shell 完成的。

更详细地说,当您通过 shell 执行命令时,将运行以下过程:

  1. 贝壳叉子创建一个新流程。

  2. 新创建的 shell(“子”shell)应用重定向:它打开指定为输出目标(或输入源)的文件,并将其设置为新的 STDOUT(或 STDIN)流(使用 杜普2系统调用)。

  3. “子”shell 执行您要求运行的命令,使用 执行(2)系统调用,用新程序替换 shell 进程。

相关内容