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

При изучении 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 не создавал файл напрямую.

  • команда оболочки 'var = ""; echo $ var 'имеет выход «h», любое объяснение?
  • Как grep для нескольких шаблонов?
  • Избегайте запуска скрипта, если переменная не определена
  • Поток grep из подпрограммы, а не файл хвоста
  • stdin, stderr, перенаправление и журналы
  • Использование регулярного выражения в ls и mv
  • Найдите слово в предложении с Bourne Shell (sh)
  • Расширение имени файла: поиск соответствия шаблону утилиты и соответствие шаблону оболочки Bash
  • One Solution collect form web for “Какой процесс / программа создает / записывает файл, к которому перенаправляется ввод-вывод?”

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

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

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

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

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

    Interesting Posts

    Как мне получить xargs, чтобы показать мне строки команд, которые он генерирует, не запуская их?

    Вилка SSH убивает соединение

    как перейти на архитектуру докеров?

    Почему абсолютная символическая ссылка на долю SAMBA напрямую связана с монтированием CIFS?

    bash как удалить параметры из параметров после обработки

    Как отображать информацию обо всех встречающихся символических ссылках по заданному пути?

    Как переименовать имя файла с помощью 'или? в имени файла?

    Telnetting Локальный порт не работает, но пытается работать ip

    Воспроизведение компактных носителей

    Что держит одну сторону rsync настолько занятой?

    xmodmap для комбинации клавиш – как переключить поведение Fn?

    Восстановление суперблока ext4

    Какие источники добавить, чтобы установить cuda toolkit с apt на Debian?

    Как именно `if $ cmd; затем $ cmd; fi` отличаются от `$ cmd && $ cmd`?

    Команда Bash Получение данных из нескольких файлов и добавление имени файла

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