Ответы:
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. Не имеет значения, установлен ли какой-либо конкретный пакет или нет.
sudo apt-file update
) и отображает только содержимое пакетов в ваших уже настроенных репозиториях Apt.
dpkg -c
отлично!
.deb
файла, который вы скачали отдельно. Хотя первоначальный вопрос неоднозначен.
Используйте --contents
вместо -L
:
dpkg --contents PACKAGENAME
При использовании таким образом dpkg
действует как интерфейс dpkg-deb
, так что используйте, man dpkg-deb
чтобы увидеть все варианты.
Вы также можете использовать архив браузера для просмотра содержимого пакета.
dpkg --contents google-chrome-stable_current_amd64.deb
выполнил команду: и он перечислил все файлы, которые он установит (в основном, в /opt/google/chrome
), ни один из которых в настоящее время не установлен в моей системе, когда я набираю это. (Я использую Xubuntu 11.10, если это имеет значение.)
dpkg --contents
позволит вам посмотреть на удаленный пакет. Если .deb еще не в вашей системе, сделайте
apt-get --download-only install pkgname
Пакет будет загружен, /var/cache/apt/archives
но не установлен.
Лучшим способом было бы просмотреть непосредственно хранилище пакетов:
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
установили).
Я взял 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';
}
Разъяснение:
https://packages.ubuntu.com
илиhttps://packages.debian.org
https://packages.ubuntu.com/trusty/all/curl/filelist
<pre>
и </pre>
теги); второй удаляет любые HTML-теги; третий удаляет все пустые строки.Примечание: он не ищет PPA, альтернативные репозитории apt-источников и запрашивает только официальные пакеты, доступные для выпуска Debian / Ubuntu, которую вы используете.
Для всех тех людей, которые могут по-прежнему гуглить эту проблему в январе 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 -c
is./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
Кажется, это невозможно до первой установки или извлечения списка из .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