Question Comment lister les fichiers d'un paquet Debian sans installation


Cette commande ne peut afficher que le contenu des packages installés,

dpkg -L PACKAGENAME

mais comment lister le contenu d'un paquet non installé, pour prévisualiser / examiner le paquet?


255
2017-12-14 06:49


origine


Similaire sur Ubuntu: askubuntu.com/questions/32507/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


Réponses:


dpkg -c (ou --contents) répertorie le contenu d’un fichier de package .deb (c’est une interface à dpkg-deb.)

dpkg -c package_file.deb

Pour travailler directement avec les noms de package plutôt que les fichiers de package, vous pouvez utiliser apt-file. (Vous devrez peut-être installer le apt-file paquet d'abord.)

sudo apt-file update        
apt-file list package_name

Comme indiqué dans le premier commentaire, apt-file répertorie le contenu des packages dans vos référentiels Apt déjà configurés. Peu importe si un paquet particulier est ou n'est pas installé.


306
2017-12-14 15:42



apt-file doit également être mis à jour (sudo apt-file update), et ne répertorie que le contenu des packages dans vos référentiels Apt déjà configurés. - quack quixote
@quackquixote: dans Ubuntu 12.04, c'est automatique - confiq
dpkg -c agréable! - d-_-b
La réponse Apt-file suppose que votre paquet provient d'un référentiel configuré au lieu d'un .deb fichier que vous avez téléchargé séparément. La question initiale est cependant ambiguë. - Zoredache
@confiq, pas par mes tests. Je suis en cours d'exécution 12.04.4 et il dit toujours "E: le cache est vide. Vous devez exécuter 'apt-file update' en premier." - Matthew Flaschen


Utilisation --contents au lieu de -L:

dpkg --contents PACKAGENAME

Utilisé de cette manière, dpkg agit comme un front-end pour dpkg-deb, alors utilisez man dpkg-deb pour voir toutes les options.

Vous pouvez également utiliser un navigateur d'archives pour afficher le contenu du package.


53
2017-12-14 08:14



Cela ne fonctionne pas sauf si je l'ai d'abord installé et ensuite le désinstaller. - Xiè Jìléi
il devrait fonctionner correctement si vous lui attribuez un fichier .deb comme argument (au lieu de PACKAGENAME, donnez-lui PACKAGE-DEB-FILE). - quack quixote
Cette réponse est fausse. Vous devez avoir le package installé en premier. Si vous ne l'avez pas installé, vous n'avez pas de fichier .deb. - Neil
Cette commande fonctionne pour moi. Par exemple, j'ai téléchargé google-chrome-stable_current_amd64.deb depuis Google. Puis émis la commande: dpkg --contents google-chrome-stable_current_amd64.deb et il a énuméré tous les fichiers qu'il va installer (principalement à /opt/google/chrome), dont aucun n’est actuellement installé sur mon système lorsque je tape ceci. (J'exécute Xubuntu 11.10 si cela compte.) - quux00
@Neil, la réponse n'est pas erronée. Ce n'est pas parce que vous avez un fichier deb qu'il est installé. apt-file nécessite l'intégralité du paquet build-essential. O.O - d-_-b


dpkg --contents vous laissera regarder le paquet désinstallé. Si le .deb n'est pas encore sur votre système, faites

apt-get --download-only install pkgname

Le paquet sera téléchargé sur /var/cache/apt/archives mais pas installé.


17
2017-12-14 14:34



Puis-je simplement lister le contenu sans le télécharger? Si je suis sur une connexion très lente, et si le paquet est trop volumineux pour le téléchargement. Si le fichier .deb a un en-tête de fichier où la liste de contenu va, je suppose que le téléchargement de l'ensemble du paquet n'est peut-être pas nécessaire. Est-ce possible? - Xiè Jìléi


Le meilleur moyen serait de parcourir directement le référentiel de paquets:

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

Exemple:

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


11
2018-06-01 13:57



Et pour éviter de quitter le terminal, vous pouvez utiliser par ex. lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/ (à condition d'avoir lynx installée). - Ruslan


j'ai pris @ idée http de baldoz et généralisé pour Ubuntu et Debian, a ajouté un petit sed et l'a enveloppé dans une fonction 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

Même fonction sur plusieurs lignes:

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

Expliqué:

  1. lsb_release -si renvoie "Ubuntu" ou "Debian", remplacez-le par l'URL de base http://packages.ubuntu.com ou https://packages.debian.org
  2. lsb_Release -sc renvoie le nom de code (par exemple "trusty", "sid", etc.), qui l'utilise pour créer l'URL complète: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. Récupère cette URL avec curl et dirige le HTML via trois commandes sed. Tout d'abord capture uniquement la liste des fichiers (ce qui est entre <pre> et </pre> Mots clés); la deuxième supprime les balises HTML; le troisième enlève toutes les lignes vides.

Note: Il ne recherche pas les PPA, ne change pas les sources apt et ne demande que les paquets officiels disponibles pour la version de debian / ubuntu que vous utilisez.


7
2018-04-21 21:44



Ai-je besoin de rubis pour le faire fonctionner? - Anwar
@Anwar, j'avais initialement utilisé Ruby parce que j'étais paresseux et que les expressions rationnelles multilignes aspiraient sed / awk / grep. Mais je l'ai réécrit pour utiliser deux commandes sed, aucun Ruby requis. - notpeter
Agréable! C'est la réponse que je cherchais - Anwar


Essayer:

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

2
2018-06-27 15:28





Semble impossible avant de l’installer ou d’extraire la liste .deb fichier.

Essayez la commande suivante:

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

Changement language-pack-en avec le nom de votre colis.

Il lit essentiellement .deb fichier extrait via curl et courir dpkg --contents FILE dessus.


Vous pouvez également vérifier le contenu sans télécharger le fichier de package.

Donc, si vous connaissez l'URL de .deb fichier, la commande shell suivante répertorie tous les fichiers de package:

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

Paramètres Curl: -s - silencieux, -L - Suivez les liens déplacés.

Si vous ne connaissez pas l'URL, récupérez-le par: apt --print-uris, par exemple.

apt --print-uris install avis | grep avis

1
2017-12-27 13:33





Pour toutes les personnes qui pourraient encore consulter ce numéro en janvier 2017, vous pouvez avoir des trucs sympas avec les versions récentes d'apt et de dpkg dans Debian 8.5 sans rien télécharger.

Contenu de la liste de fichiers Deb sans téléchargement: 

Localisez d'abord l'URL complète du fichier 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 imprime l'url du paquet deb mais deb n'est pas téléchargé.

Ensuite, affichez le contenu du paquet deb sans le télécharger:

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: Même résultat possible avec

root@debian:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb")

Extraire un fichier du paquet deb ci-dessus, sans le télécharger.
Par exemple, nous voulons lire la page de manuel du package yade sans installer ce paquet et sans même télécharger le paquet deb.

Nom de fichier de la page de manuel dans le paquet deb comme conseillé par dpkg -c est ./usr/share/man/man1/yade.1.gz

Pour lire la page de manuel à la volée:

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

La page de manuel est affichée correctement à l'aide de l'application man.

PS: Au-dessus des tuyaux ne fonctionne pas avec la commande 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