2009-12-14 06:49:35 +0000 2009-12-14 06:49:35 +0000
295
295

Как составить список файлов пакета Debian без установки

Эта команда может составить список только установленных пакетов,

dpkg -L PACKAGENAME

, но как составить список содержимого неустановленного пакета, как просмотреть/опробовать пакет?

Ответы (8)

359
359
359
2009-12-14 15:42:54 +0000

dpkg -c (или --contents) перечисляет содержимое файла .deb пакета (Это внешний интерфейс к dpkg-deb.)

dpkg -c package_file.deb

Для работы непосредственно с именами пакетов, а не с файлами пакетов, вы можете использовать apt-file. (Сначала вам может понадобиться установить пакет apt-file.)

sudo apt-file update        
apt-file list package_name

Как было сказано в первом комментарии, apt-файл перечисляет содержимое пакетов в уже настроенных репозиториях Apt. Не имеет значения, установлен тот или иной пакет или нет.

58
58
58
2009-12-14 08:14:19 +0000

Используйте --contents вместо -L:

dpkg --contents PACKAGENAME

При таком использовании dpkg действует как внешний интерфейс dpkg-deb, поэтому используйте man dpkg-deb, чтобы увидеть все опции.

Вы также можете использовать браузер архивов для просмотра содержимого пакета.

23
23
23
2009-12-14 14:34:45 +0000

dpkg --contents позволит вам взглянуть на неустановленный пакет. Если .deb еще не установлен в вашей системе, выполните

apt-get --download-only install pkgname

Пакет будет загружен в /var/cache/apt/archives, но не установлен.

15
15
15
2013-06-01 13:57:56 +0000

Лучшим способом будет прямой просмотр репозитория пакета:

http://packages.debian.org/[distro name]/all/[package name]/filelist

Пример:

http://packages.debian.org/wheezy/all/transmission-common/filelist

8
8
8
2015-04-21 21:44:25 +0000

Я взял @baldoz’s http idea и обобщил его для Ubuntu и Debian, добавил немного sed и обернул его в функцию bash one-liner:

function deb_list () { curl -s $(lsb_release -si | sed -e 's Ubuntu https://packages.ubuntu.com ' -e 's Debian https://packages.debian.org ')/$(lsb_release -sc)/all/$1/filelist | sed -n -e '/<pre>/,/<\/pre>/p' | sed -e 's/<[^>]>//g' -e '/^$/d'; }

Использование:

$ deb_list curl
/usr/bin/curl
/usr/share/doc/curl/changelog.Debian.gz
/usr/share/doc/curl/copyright
/usr/share/doc/curl/NEWS.Debian.gz
/usr/share/man/man1/curl.1.gz

Одна и та же функция на нескольких строках:

function deb_list () {
    curl -s $(lsb_release -si \
                | sed -e 's Ubuntu https://packages.ubuntu.com ' \
                      -e 's Debian https://packages.debian.org '
              )/$(lsb_release -sc)/all/$1/filelist \
      | sed -n -e '/<pre>/,/<\/pre>/p' \
      | sed -e 's/<[^>]>//g' -e '/^$/d';
}

Объяснено:

  1. lsb_release -si возвращает “Ubuntu” или “Debian”, заменяя его базовым url https://packages.ubuntu.com или https://packages.debian.org
  2. lsb_Release -sc возвращает кодовое имя (например, “trusty”, “sid” и т.д.), используемое для сборки полного URL: https://packages.ubuntu.com/trusty/all/curl/filelist
  3. Получите этот URL с помощью curl и пропустите html через три команды sed. Первая захватывает только список файлов (что между тегами <pre> и </pre>); вторая удаляет любые html-теги; третья удаляет любые пустые строки.

Замечание: Она не ищет PPA, альтернативное хранилище apt исходного кода и запрашивает только официальные пакеты, доступные для выпуска debian/ubuntu, который вы запустили.

5
5
5
2017-01-06 03:14:29 +0000

Для всех тех, кто ещё может погуглить этот выпуск в январе 2017 года, вы можете скачать что-нибудь классное с последними версиями apt и dpkg в Debian 8.5 без скачивания.

Содержимое Deb File Without Download:

Найдите сначала полный url deb файла :

root@debian:apt-get --print-uris download yade
'http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb' yade_2016.06a-7_amd64.deb 1621148 SHA256:26c0d84484a92ae9c2828edaa63243eb764378d79191149970926aa3ec40cdd4

PS: –print-uris switch печатает url deb пакета, но deb не скачивался.

Затем отобразите содержимое deb-пакета без загрузки:

root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb -c /dev/stdin
drwxr-xr-x root/root 0 2016-12-10 22:18 ./
drwxr-xr-x root/root 0 2016-12-10 22:18 ./usr/
drwxr-xr-x root/root 0 2016-12-10 22:18 ./usr/bin/
-rwxr-xr-x root/root 13184 2016-12-10 22:18 ./usr/bin/yade
.........................more files listed bellow ......................

PS: Тот же результат может быть достигнут с

root@debian:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb")

*Извлечение файла из вышеуказанного deb-пакета, без загрузки. * Например, мы хотим прочитать man-страницу пакета yade без установки этого пакета и даже без загрузки deb-пакета.

Имя файла man-страницы внутри deb-пакета в соответствии с рекомендацией dpkg -c - ./usr/share/man/man1/yade.1.gz

Читать man-страницу “на лету”:

root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb --fsys-tarfile /dev/stdin |tar -xO ./usr/share/man/man1/yade.1.gz |man /dev/stdin

man-страница отображается правильно с помощью man-приложения.

PS: Вышеуказанные трубы не работают с командой ar.

root@debian:apt --version --> apt 1.4~beta2 (amd64)
root@debian:dpkg --version --> Debian 'dpkg' package management program version 1.18.18 (amd64).
root@debian:man --version --> man 2.7.6.1
root@debian:tar --version --> tar (GNU tar) 1.29
2
2
2
2014-06-27 15:28:37 +0000

Попробуйте:

apt-get download packages-name
dpkg --contents *.deb
1
1
1
2015-12-27 13:33:51 +0000

Похоже, что это невозможно перед первой установкой или извлечением списка из файла .deb.

Попробуйте выполнить следующую команду:

dpkg --contents <(curl -s $(apt-get install --yes --no-download --reinstall --print-uris language-pack-en | tail -n1 | grep -o "http[^']"))

Измените language-pack-en с именем вашего пакета.

В основном он читает файл .deb, извлеченный из файла curl и запускает dpkg --contents FILE на нем.

  • *

Вы также можете проверить содержимое без загрузки файла пакета.

Таким образом, если вы знаете URL .deb файла, следующая команда оболочки перечислит все файлы пакета:

dpkg -c <(curl -sL "http://httpredir.debian.org/debian/pool/main/a/avis/avis_1.2.2-4_all.deb")

Параметры Curl: -s - беззвучный, -L - переместить ссылки.

Если вы не знаете URL, извлеките: apt --print-uris, например

apt --print-uris install avis | grep avis
```.

Похожие вопросы

12
8
5
15
8