Intereting Posts
Окружающая среда Gnome: как заставить ее работать на OpenBSD? Почему это добавляет пробелы? echo "x ax" | sed 's / x \ s * / x /' Что делать, если я не могу найти файл ssl.conf на сервере CentOS? Как настроить .bashrc для настройки командной строки? Повторное использование данных о трубах для разных команд Как найти имя / хэширование докеров, чтобы его можно было экспортировать? Как создать привязку ключей для повторного поиска конфигурации оболочки без сохранения новой команды в истории? Есть ли способ контролировать скорость, с которой поступают отчеты Curl? Сервер Xorg не запускается Как загрузить файл путем подделки IP-адреса запроса? mutt: определить, какие заголовки отображаются (в компоновке) Firefox не работает после открытия Файл Kickstart – установщик игнорирует некоторые из пакетов «не устанавливайте» из раздела пакетов Невозможно подключиться к Wi-Fi с помощью NetworkManager (причина отсутствия секретов) в Debian 9 Функция VIM для создания нового файла с заголовком, включая имя файла и временную метку

понимание "dpkg –status-fd n"

От man dpkg (1.16.16 (i386) на Debian (7) на основе Linux Distro):

--status-fd n
Отправлять машиночитаемый статус пакета и информацию о ходе работы в дескриптор файла n

Я прочитал это как: « форматируемый машиной считываемый код, например, сгенерированный через printf в дескриптор файла ». Я (думаю) знаю файловые дескрипторы stdin (0), stdout (1) и stderr (2).

Пытаясь найти несколько примеров, я нашел почти ничего, кроме отчетов об ошибках, с файловыми дескрипторами, частично состоящими из двух цифр (возможно, больше …). Это расширило мои знания о дескрипторах файлов , что привело к появлению большего числа вопросов. Таким образом:

Вопрос : Как используется опция dpkg --status-fd ?

Фактический пример и некоторые примечания о том, что произойдет, помогут мне в понимании

Опция --status-fd сообщает dpkg сообщать о прогрессе таким образом, что другие программы могут анализировать, например, чтобы представить приятные отчеты о проделанной работе пользователю в графическом интерфейсе.

Аргументом для --status-fd является дескриптор файла , то есть номер, который обозначает открытый файл. Упрощение вещей немного:

  • Когда процесс открывает файл в первый раз, этому файлу присваивается дескриптор номер 0. В следующий раз файлу присваивается дескриптор номер 1 и т. Д. open системный вызов возвращает дескриптор файла.
  • Когда процесс хочет выполнить операцию над файлом, например, чтение или запись из него, он определяет файл по его дескриптору, например, read(0, addr, 10) означает «читать 10 байт из дескриптора 0 и помещать их в память адрес addr ".
  • Каждый процесс имеет свои собственные файловые дескрипторы: дескриптор файла n в процессе p не имеет отношения к дескриптору файла n в процессе q .
  • Процессы наследуют дескрипторы файлов своего родителя при их создании.
  • По соглашению процессы выполняются с уже открытыми файловыми дескрипторами 0, 1 и 2. 0 для ввода, 1 для нормального выхода и 2 для сообщений об ошибках.

Перенаправление открывает файл в определенном дескрипторе. Например, в сценарии оболочки или в командной строке mycommand <somefile подключает файловый дескриптор номер 0 (стандартный ввод), поэтому somefile (который открывается для чтения) вместо того, что было раньше (терминал, если команда выполняется в терминал). Вы можете добавить номер дескриптора к оператору перенаправления: mycommand 3<somefile подключает файловый дескриптор номер 3 к somefile (большинство команд ничего не будут делать с этим файловым дескриптором).

Когда dpkg устанавливает, обновляет или удаляет пакеты, он выполняет различные другие команды в сценариях установки / удаления пакетов. Некоторые из этих команд могут считывать сообщения ввода или отображения, поэтому dpkg поддерживает стандартные дескрипторы, связанные с тем, с чем они были связаны, когда он был вызван.

Поскольку стандартные дескрипторы файлов уже приняты, dpkg позволяет вызывающему указать другой для отчетов о состоянии. Вы можете поместить отчеты о состоянии в файл, например:

 dpkg --status-fd 3 -i somefile.deb 3>/tmp/dpkg.status 

В другом терминале запустите tail -n +1 -f /tmp/dpkg.status и просмотрите сообщения о состоянии.

Часто front-end, вызывающий dpkg и требующий отчетов о статусе, открывает канал (однонаправленный канал связи) до dpkg и передает дескриптор файла для записи конца канала в качестве аргумента --status-fd . Затем интерфейсный модуль считывает из считываемого конца трубы и получает сообщения о статусе по мере их создания, не рискуя им смешиваться с чем-либо еще.