Вопрос или проблема
Чтобы извлечь и отобразить в каталоге /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
У меня есть два вопроса по поводу вывода команды:
- отображается только 6 файлов, все остальные не являются файлами, а являются
директориями, начинающимися с ./, что обычно должно означать «текущий
каталог». - в каталоге /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
принимает два аргумента:
- Архив пакета (например, xserver-xorg-input-libinput_1.4.0-1_amd64.deb) – это файл, из которого будут извлекаться данные.
- Целевая директория (например, /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. Тем не менее, важно помнить, что вы взаимодействуете с относительными путями, и корректно учитывать структуру каталогов в процессе работы с командой.