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

238322
Xiè Jìléi

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

dpkg -L PACKAGENAME 

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

262
Похоже на Ubuntu: http://askubuntu.com/questions/32507/how-do-i-get-a-list-of-installed-files-from-a-package Ciro Santilli 新疆改造中心 六四事件 法轮功 9 лет назад 0

8 ответов на вопрос

311
alfplayer

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

apt-file также необходимо обновить (`sudo apt-file update`), и он перечисляет только содержимое пакетов в уже настроенных репозиториях Apt. quack quixote 14 лет назад 14
@quackquixote: в Ubuntu 12.04 это происходит автоматически confiq 12 лет назад 1
`dpkg -c` приятно! d-_-b 12 лет назад 1
Ответ Apt-файла предполагает, что ваш пакет поступает из настроенного хранилища, а не из файла `.deb`, который вы скачали отдельно. Хотя первоначальный вопрос неоднозначен. Zoredache 11 лет назад 2
@confiq, не моим тестированием. Я использую 12.04.4, и он по-прежнему говорит: «E: Кэш пуст. Сначала нужно запустить« apt-file update »». Matthew Flaschen 10 лет назад 4
`apt-file list` не работает для меня. icando 10 лет назад 0
Для @eskhool - неверно, что обновление apt-файла не требуется в Ubuntu ... с Ubuntu 14.04 это все еще требуется fixer1234 9 лет назад 0
Чтобы показать описание пакета и элементы управления, ar p NAME.deb control.tar.gz | tar xOvz ./control eel ghEEz 9 лет назад 0
55
quack quixote

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

dpkg --contents PACKAGENAME 

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

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

Это не работает, если я сначала не установил его, а затем удалил. Xiè Jìléi 14 лет назад 2
он должен работать нормально, если вы дадите ему в качестве аргумента файл .deb (вместо PACKAGENAME укажите его PACKAGE-DEB-FILE). quack quixote 14 лет назад 3
Этот ответ неверен. Вы должны сначала установить пакет. Если он не установлен, значит, у вас нет файла .deb. Neil 12 лет назад 2
Эта команда работает для меня. Например, я скачал google-chrome-stable_current_amd64.deb из Google. Затем введите команду: `dpkg --contents google-chrome-stable_current_amd64.deb` и в нем перечислены все файлы, которые он будет устанавливать (в основном в` / opt / google / chrome`), ни один из которых в настоящее время не установлен в моей системе. как я набираю это. (Я использую Xubuntu 11.10, если это имеет значение.) quux00 12 лет назад 0
@ Нейл, ответ не неправильный. То, что у вас есть файл deb, не означает, что он установлен. apt-file нужен весь пакет, необходимый для сборки. OO d-_-b 12 лет назад 10
Прекрасно работает для меня, и не требует установки полного пакета build-essential, как того требует принятый ответ. plang 11 лет назад 0
Get the .deb file with `apt-get download`, e.g.: `apt-get download apt-file; dpkg -c apt-file*.deb; rm apt-file*.deb`. reinierpost 8 лет назад 0
18
Rudedog

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

apt-get --download-only install pkgname 

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

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

The best way would be to browse directly the package repository:

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

Example:

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

И чтобы не покидать терминал, вы можете использовать, например, `lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^ / `(при условии, что у вас установлен` lynx`). Ruslan 6 лет назад 0
7
notpeter

I took @baldoz's http idea and generalized it for Ubuntu and Debian, added a little sed and wrapped it in a bash function 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'; } 

Usage:

$ 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 

Same function on multiple lines:

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'; } 

Explained:

  1. lsb_release -si returns "Ubuntu" or "Debian" replace that with the base url http://packages.ubuntu.com or https://packages.debian.org
  2. lsb_Release -sc returns the codename (e.g. "trusty", "sid", etc) use that to build the full URL: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. Fetch that URL with curl and pipe the html through three sed commands. First captures only the file list (what's between <pre> and </pre> tags); second strips out any html tags; third removes any blank lines.

Note: It doesn't search PPAs, alternate apt sources repos and only queries official packages available for the release of debian/ubuntu you are running.

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

Пытаться:

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

Seems it's not possible before installing it first or extracting the list from .deb file.

Try the following command:

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

Change language-pack-en with your package name.

It basically reads .deb file extracted via curl and run dpkg --contents FILE on it.


You can also check the content without downloading the package file.

So if you know the URL of .deb file, the following shell command will list all the package files:

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

Curl params: -s - silent, -L - follow moved links.

If you don't know the URL, fetch by: apt --print-uris, e.g.

apt --print-uris install avis | grep avis 
1
George Vasiliou

Для всех тех людей, которые могут по-прежнему гуглить эту проблему в январе 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 не загружается.

Затем отобразите содержимое пакета 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, без загрузки.
Например, мы хотим прочитать справочную страницу пакета yade, не устанавливая этот пакет и даже не загружая пакет deb.

Имя файла справочной страницы внутри пакета deb в соответствии с рекомендациями dpkg -cis./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 

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