Вопрос: Как перечислить файлы пакета Debian без установки


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

dpkg -L PACKAGENAME

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


250
2017-12-14 06:49


Источник


Похожие на Ubuntu: askubuntu.com/questions/32507/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


Ответы:


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


301
2017-12-14 15:42



apt-файл также необходимо обновить (sudo apt-file update), и только списки содержимого для пакетов в уже настроенных репозиториях Apt. - quack quixote
@quackquixote: В Ubuntu 12.04 он автоматически - confiq
dpkg -c хороший! - d-_-b
Ответ Apt-файла предполагает, что ваш пакет поступает из настроенного репозитория, а не из .deb файл, который вы загрузили отдельно. Однако исходный вопрос неоднозначен. - Zoredache
@confiq, а не моим тестированием. Я запускаю 12.04.4, и он все еще говорит «E: Кэш пуст. Сначала нужно запустить« apt-file update ». - Matthew Flaschen


использование --contents вместо -L:

dpkg --contents PACKAGENAME

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

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


52
2017-12-14 08:14



Это не работает, если я не установил его первым, а затем удалю. - Xiè Jìléi
он должен работать нормально, если вы дадите ему файл .deb в качестве аргумента (вместо PACKAGENAME, дайте ему PACKAGE-DEB-FILE). - quack quixote
Этот ответ неверен. Сначала вы должны установить пакет. Если у вас его нет, то у вас нет файла .deb. - Neil
Эта команда работает для меня. Например, я загрузил google-chrome-stable_current_amd64.deb из Google. Затем вышла команда: dpkg --contents google-chrome-stable_current_amd64.deb и он перечисляет все файлы, которые он будет устанавливать (в основном для /opt/google/chrome), ни один из которых в настоящее время не установлен в моей системе по мере ввода этого параметра. (Я занимаюсь Xubuntu 11.10, если это имеет значение.) - quux00
@Neil, ответ не ошибается. Просто потому, что у вас есть файл deb, это не значит, что он установлен. apt-file необходим весь пакет, необходимый для сборки. o.o - d-_-b


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

apt-get --download-only install pkgname

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


17
2017-12-14 14:34



Могу ли я просто перечислить содержимое без его загрузки? Если у меня очень медленное соединение, и если пакет слишком большой для загрузки. Если в файле .deb есть заголовок файла, где идет список содержимого, я думаю, загрузка всего пакета может быть необязательна. Это возможно? - Xiè Jìléi


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

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

Пример:

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


10
2018-06-01 13:57





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

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, который вы используете.


7
2018-04-21 21:44



Нужен ли мне рубин для его запуска? - Anwar
@Anwar, я изначально использовал Ruby, потому что я был ленивым и многострочным регулярным выражением всасывал sed / awk / grep. Но я переписал его, чтобы использовать две команды sed, не требуя Ruby. - notpeter
Ницца! Это тот ответ, который я искал - Anwar


Пытаться:

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

2
2018-06-27 15:28





Кажется, что это невозможно, прежде чем устанавливать его сначала или извлечь список из .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")

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

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

apt --print-uris install avis | grep avis

1
2017-12-27 13:33





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

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

Сначала найдите полный 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 не загружается.

Затем отобразите содержимое пакета 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

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

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

1
2018-01-06 03:14