Як перелічити файли пакета Debian без встановлення


Відповіді:


340

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. Неважливо, встановлений чи не встановлений якийсь пакет.


17
apt-файл також потрібно оновити ( sudo apt-file update), і він містить лише вміст пакетів у ваших уже налаштованих сховищах Apt.
крякав кіхот

1
@quackquixote: В Ubuntu 12.04 це автоматично
confiq

1
dpkg -cприємно!
d -_- b

2
Відповідь файлу Apt передбачає, що ваш пакет надходить із налаштованого сховища замість .debфайлу, який ви завантажили окремо. Первісне питання, однак, неоднозначне.
Зоредаче

5
@confiq, не моїм тестуванням. Я працюю 12.04.4, і він все ще говорить "E: Кеш порожній. Спочатку потрібно запустити" оновлення apt-файлів "."
Меттью Флашен

58

Використовуйте --contentsзамість -L:

dpkg --contents PACKAGENAME

Якщо використовується таким чином, він dpkgвиступає як передній dpkg-deb, тому використовуйте man dpkg-debдля перегляду всіх варіантів.

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


2
Це не працює, якщо я спочатку його не встановив, а потім видалив.
Xiè Jìléi

3
він повинен працювати добре, якщо ви надаєте йому .deb файл як аргумент (замість PACKAGENAME, надайте йому PACKAGE-DEB-FILE).
шарлатанний кіхот

3
Ця відповідь неправильна. Ви повинні спочатку встановити пакет. Якщо у вас його не встановлено, у вас немає файлу .deb.
Ніл

Ця команда працює для мене. Наприклад, я завантажив з Google google-chrome-stable_current_amd64.deb. Потім видав команду: dpkg --contents google-chrome-stable_current_amd64.debі в ній перераховані всі файли, які вона буде встановлена ​​(здебільшого /opt/google/chrome), жоден з яких наразі не встановлений у моїй системі під час введення цього тексту. (Я запускаю Xubuntu 11.10, якщо це має значення.)
quux00

10
@Neil, відповідь неправильна. Тільки тому, що у вас є файл deb, не означає, що він встановлений. apt-файлу потрібен весь необхідний пакунок збірки. OO
d -_- b

21

dpkg --contentsдозволить вам переглянути видалений пакет. Якщо .deb ще немає у вашій системі, зробіть це

apt-get --download-only install pkgname

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


3
Чи можу я просто перерахувати вміст, не завантажуючи його? Якщо я перебуваю на дуже повільному з’єднанні і якщо пакет занадто великий для завантаження. Якщо у файлі .deb є заголовок файлу, куди йде список вмісту, я думаю, завантажувати весь пакет, можливо, не потрібно. Чи можливо це?
Xiè Jìléi

13

Найкращим способом було б безпосередньо переглядати сховище пакунків:

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

Приклад:

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


І щоб уникнути виходу з терміналу, ви можете використовувати напр. lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/(За умови lynxвстановлення).
Руслан

8

Я взяв http-ідею @ baldoz і узагальнив її для Ubuntu та Debian, додав трохи sedі загорнув її в однофаймову функцію bash:

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 повертає кодове ім'я (наприклад, "довірливо", "sid" тощо), використовуючи це для створення повної URL-адреси: https://packages.ubuntu.com/trusty/all/curl/filelist
  3. Виберіть цю URL-адресу за допомогою curl та переведіть html через три команди sed. Спочатку фіксує лише список файлів (що між ними <pre>та </pre>тегами); другий знімає будь-які теги HTML; третя видаляє будь-які порожні рядки.

Примітка. Він не здійснює пошук PPA, альтернативні репостні джерела репостів та запитує лише офіційні пакети, доступні для випуску debian / ubuntu, який ви запускаєте.


Чи потрібен мені рубін, щоб запустити його?
Анвар

1
@Anwar, я спочатку використовував Ruby, тому що я лінивий і багаторядкові реджекси смоктали в sed / awk / grep. Але я переписав це, щоб використовувати дві команди sed, не потрібно Ruby.
notpeter

Приємно! Це відповідь, яку я шукав
Anwar

4

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

Список вмісту файлу Deb без завантаження:

Спочатку знайдіть повну 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 друкує URL пакету 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")

Витягніть файл із вищевказаного пакету деб, без завантаження.
Наприклад, ми хочемо прочитати man-сторінку сторінки yade, не встановлюючи цей пакет і навіть не завантажуючи пакет deb.

Файл сторінки людини всередині пакету DEB в відповідно до рекомендацій dpkg -cє./usr/share/man/man1/yade.1.gz

Щоб прочитати сторінку людини на льоту:

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

Цей опис працює для систем, які використовують тільки "apt" і не мають старих команд "apt-x"!
Джон Ватт


1

Здається, це неможливо перед тим, як встановити його першим або витягти список із .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 params: -s- мовчати, -L- переходити за перехідними посиланнями.

Якщо ви не знаєте URL-адреси, отримайте:, apt --print-urisнапр

apt --print-uris install avis | grep avis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.