it-swarm.xyz

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

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

dpkg -L PACKAGENAME

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

272
Xiè Jìléi

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. Не имеет значения, установлен ли какой-либо конкретный пакет или нет.

326
alfplayer

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

dpkg --contents PACKAGENAME

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

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

56
quack quixote

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

apt-get --download-only install pkgname

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

20
Rudedog

Лучшим способом было бы просмотреть непосредственно хранилище пакетов:

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

Пример:

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

12
baldoz

Я взял идею @ baldoz http и обобщил ее для Ubuntu и Debian, добавил немного sed и обернул ее в однострочную функцию bash:

function deb_list () { curl -s $(lsb_release -si | sed -e 's Ubuntu http://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 http://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 http://packages.ubuntu.com или https://packages.debian.org
  2. lsb_Release -sc возвращает кодовое имя (например, "trusty", "sid" и т. д.), которое используется для создания полного URL: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. Получите этот URL с помощью curl и передайте HTML через три команды sed. Сначала захватывает только список файлов (что находится между тегами <pre> и </pre>); второй удаляет любые HTML-теги; третий удаляет все пустые строки.

Примечание: он не ищет PPA, альтернативные репозитории apt-источников и запрашивает только официальные пакеты, доступные для выпуска Debian/Ubuntu, которую вы используете.

8
notpeter

Пытаться:

apt-get download packages-name
dpkg --contents *.deb
2
readanon

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

Список содержимого файла Deb без загрузки:

Сначала найдите полный URL-адрес файла deb:

[email protected]: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 печатает URL пакета deb, но deb не загружается.

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

[email protected]: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: тот же результат может быть достигнут с

[email protected]:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_AMD64.deb")

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

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

Чтобы прочитать справочную страницу на лету:

[email protected]: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.

[email protected]:apt --version --> apt 1.4~beta2 (AMD64)
[email protected]:dpkg --version --> Debian 'dpkg' package management program version 1.18.18 (AMD64).
[email protected]:man --version --> man 2.7.6.1
[email protected]:tar --version --> tar (GNU tar) 1.29
2
George Vasiliou

Кажется, это невозможно до первой установки или извлечения списка из файла .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, следующая команда Shell выведет список всех файлов пакета:

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

Параметры скручивания: -s - без звука, -L - переход по перемещенным ссылкам.

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

apt --print-uris install avis | grep avis
1
kenorb