Какой процесс / программа создает / записывает файл, к которому перенаправляется ввод-вывод?

При изучении SELinux я выполнил semanage fcontext -l > fcontext.txt /root чтобы сбрасывать массивную информацию fcontext в файл. Смешной результат: fcontext.txt был создан, но его размер равен 0.

Я спросил в # IRC-канале fedora-selinux , Fedora QA сказал мне попробовать изменить тип контекста SELinux fcontext.txt на semanage_tmp_t . Это работает наконец.

Но меня все еще путают:

Какой процесс / программа создает / записывает стандартный вывод в перенаправленный файл? (так что политика SELinux targetd должна применяться к этому процессу / программе)

  • Оболочка bash? /bin/bash
  • или семанаж (это скрипт python)? /usr/sbin/semanage
  • или интерпретатор – питон? /usr/bin/python

Я думал, что это должна быть оболочка bash, потому что перенаправление ввода-вывода контролируется оболочкой (правильно?), А не самой программой. поэтому semanage / python не создавал файл напрямую.

  • Постоянно проверяйте, изменен ли файл bash
  • Снять демона с помощью sudo?
  • Псевдоним команды для уничтожения остановленных заданий
  • После небольшого изменения кода «awk» печатает заголовок и пустые строки (не повторяется заголовок)
  • Как процитировать аргументы с помощью xargs
  • Автозаполнение оболочки очень медленное после форматирования частичного диска
  • У меня есть 10 файлов в папке Unix с расширением .txt, здесь мне нужно получить все файлы отдельно от файла fgh.txt (любой), что такое команда UNIX?
  • Каковы режимы readline, раскладки клавиш и их привязки по умолчанию?
  • One Solution collect form web for “Какой процесс / программа создает / записывает файл, к которому перенаправляется ввод-вывод?”

    Вы правы: перенаправление для входных и выходных потоков выполняется оболочкой.

    Более подробно, когда вы выполняете команду через оболочку, запускается следующая процедура:

    1. Оболочка вилки для создания нового процесса.

    2. Вновь созданная оболочка («дочерняя» оболочка) применяет перенаправления: она открывает файл, указанный как конечный результат (источник входного сигнала), и устанавливает его как новый поток STDOUT (соответственно STDIN) (используя системный вызов dup2 ).

    3. В «дочерней» оболочке выполняется команда, которую вы попросили запустить, используя системный вызов execve (2) , который заменяет процесс оболочки новой программой.

    Linux и Unix - лучшая ОС в мире.