О команде dpkg -X

Вопрос или проблема

Чтобы извлечь и отобразить в каталоге /tmp имена файлов, содержащиеся в пакете xserver-xorg-input-libinput_1.4.0-1_amd64.deb, я использовал эту команду:

# dpkg -X xserver-xorg-input-libinput_1.4.0-1_amd64.deb /tmp

Результат был следующим:

./
./usr/
./usr/lib/
./usr/lib/xorg/
./usr/lib/xorg/modules/
./usr/lib/xorg/modules/input/
./usr/lib/xorg/modules/input/libinput_drv.so
./usr/share/
./usr/share/X11/
./usr/share/X11/xorg.conf.d/
./usr/share/X11/xorg.conf.d/40-libinput.conf
./usr/share/bug/
./usr/share/bug/xserver-xorg-input-libinput/
./usr/share/doc/
./usr/share/doc/xserver-xorg-input-libinput/
./usr/share/doc/xserver-xorg-input-libinput/changelog.Debian.gz
./usr/share/doc/xserver-xorg-input-libinput/changelog.gz
./usr/share/doc/xserver-xorg-input-libinput/copyright
./usr/share/man/
./usr/share/man/man4/
./usr/share/man/man4/libinput.4.gz
./usr/share/bug/xserver-xorg-input-libinput/script

У меня есть два вопроса по поводу вывода команды:

  1. отображается только 6 файлов, все остальные не являются файлами, а являются
    директориями, начинающимися с ./, что обычно должно означать «текущий
    каталог».
  2. в каталоге /tmp ничего не отображается: почему?

PS1:

/tmp$ ls 
security_state
........
usr
/tmp/usr$ ls
lib  share
/tmp/usr/share/doc/xserver-xorg-input-libinput# ls
changelog.Debian.gz  changelog.gz  copyright

$ man dpkg
dpkg также может использоваться как интерфейс к dpkg-deb(1).....

$ man dpkg-deb
-x, --extract archive directory
 Извлекает файловое дерево из архивa пакета в указанный каталог
....
каталог (но не его родительские каталоги) будет создан при необходимости....

Я бы сослался на этот ответ askubuntu, который ссылается на мануал dpkg

  --instdir=dir
     Установите каталог установки, который относится к каталогу,
      в который будут установлены пакеты.  instdir также является
      каталогом, переданным в chroot(2) перед запуском
      сценариев установки пакета, что означает, что сценарии видят
      instdir как корневой каталог.  По умолчанию — «/».

Если вы устанавливаете пакет, это относительным к / , если только вы не скажете своей системе иначе. Я предполагаю, что dpkg будет идти в этот каталог и делать оттуда текущий каталог. Теперь вы заметите, что он создает полный путь к каждому файлу — на случай, если промежуточные директории не существуют, они будут созданы, в противном случае я думаю, что он терпеливо завершает работу и продолжает работу с следующим файлом.

Из того же мануала:

-X, --vextract archive directory
Извлекает и отображает имена файлов, содержащиеся в пакете.

Он показывает имена файлов, а не вывод.

Ответ или решение

Команда dpkg -X: Полное руководство и ответы на ваши вопросы

Команда dpkg -X, используемая для извлечения файлов из Debian-пакетов (.deb), обладает большим потенциалом, позволяя администраторам системы и пользователям обращаться к содержимому пакетов без их установки. В этом ответе мы подробно рассмотрим вашу команду, её вывод и ответим на ваши вопросы.

Что делает команда dpkg -X?

Команда dpkg -X принимает два аргумента:

  1. Архив пакета (например, xserver-xorg-input-libinput_1.4.0-1_amd64.deb) – это файл, из которого будут извлекаться данные.
  2. Целевая директория (например, /tmp) – это место, куда будет производиться извлечение файлов.

Когда вы выполняете команду:

dpkg -X xserver-xorg-input-libinput_1.4.0-1_amd64.deb /tmp

dpkg извлекает файловую систему из указанного пакета в целевую директорию, создавая необходимые подкаталоги. Однако сама команда не создаёт пустые файлы, а заботится о создании необходимых папок.

Ответы на ваши вопросы

1. Почему вывод показывает только 6 файлов, тогда как остальные это директории, начинающиеся с ./?

Вывод, который вы увидели, представляет собой относительные пути к файлам и каталогам, которые содержатся в пакете. Символ ./ указывает на то, что последующие пути являются относительными к текущему местоположению, что является стандартным поведением в Unix-подобных системах.

Когда вы используете dpkg -X, команда извлекает как файлы, так и директории. В вашем случае извлеклись директории, и вы видите их пути, начиная с ./, что указывает на то, что это относительные пути к директориям, которые содержатся в пакете.

2. Почему ничего не отображается в директории /tmp?

Ваш вывод ls из директории /tmp показывает, что вы действительно видите подкаталоги usr, созданные в результате извлечения. Процесс dpkg -X создаёт полное дерево каталогов, начиная с указанной директории. То есть путь /tmp/usr/lib/xorg/modules/input/libinput_drv.so — это полное расположение одного из файлов, извлечённых из пакета.

Поэтому, когда вы смотрите в директорию /tmp, вам может не показаться, что файлы там находятся, потому что они находятся в подкаталогах. Чтобы увидеть фактические файлы, вы могли бы выполнить команду ls /tmp/usr/share/doc/xserver-xorg-input-libinput, которая покажет извлечённые документы.

Заключение

Использование команды dpkg -X — это мощный инструмент для работы с .deb пакетами, позволяющий извлекать не только файлы, но и полностью организованное файловое древо, что упрощает анализ содержимого пакетной системы Debian. Тем не менее, важно помнить, что вы взаимодействуете с относительными путями, и корректно учитывать структуру каталогов в процессе работы с командой.

Оцените материал
Добавить комментарий

Капча загружается...