Как составить список файлов пакета Debian без установки
Эта команда может составить список только установленных пакетов,
dpkg -L PACKAGENAME
, но как составить список содержимого неустановленного пакета, как просмотреть/опробовать пакет?
Эта команда может составить список только установленных пакетов,
dpkg -L PACKAGENAME
, но как составить список содержимого неустановленного пакета, как просмотреть/опробовать пакет?
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. Не имеет значения, установлен тот или иной пакет или нет.
Используйте --contents
вместо -L
:
dpkg --contents PACKAGENAME
При таком использовании dpkg
действует как внешний интерфейс dpkg-deb
, поэтому используйте man dpkg-deb
, чтобы увидеть все опции.
Вы также можете использовать браузер архивов для просмотра содержимого пакета.
Я взял @baldoz’s http idea и обобщил его для Ubuntu и Debian, добавил немного sed
и обернул его в функцию bash one-liner:
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 File Without Download:
Найдите сначала полный 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 switch печатает 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
Читать man-страницу “на лету”:
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")
Параметры Curl: -s
- беззвучный, -L
- переместить ссылки.
Если вы не знаете URL, извлеките: apt --print-uris
, например
apt --print-uris install avis | grep avis
```.