web-dev-qa-db-fra.com

Comment lister les fichiers d'un paquet Debian sans les installer

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

dpkg -L PACKAGENAME

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

272
Xiè Jìléi

dpkg -c (ou --contents) répertorie le contenu d'un fichier de package .deb (il s'agit d'un serveur frontal à 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 d'abord installer le package apt-file.)

Sudo apt-file update        
apt-file list package_name

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

326
alfplayer

Utilisez --contents au lieu de -L:

dpkg --contents PACKAGENAME

Lorsque utilisé de cette manière, dpkg agit en tant que serveur frontal de dpkg-deb, utilisez donc man dpkg-deb pour afficher toutes les options.

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

56
quack quixote

dpkg --contents vous permettra de 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é dans /var/cache/apt/archives mais pas installé.

20
Rudedog

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

12
baldoz

J'ai pris l'idée de @ http de baldoz et je l'ai généralisée pour Ubuntu et Debian, j'ai ajouté un petit sed et je l'ai enveloppée dans une ligne unique avec la fonction bash:

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

A 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 retourne le nom de code (par exemple, "trusty", "sid", etc.) et l'utilise pour construire l'URL complète: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. Récupérez cette URL avec curl et dirigez le code HTML via trois commandes sed. Premièrement, ne capture que la liste de fichiers (entre les balises <pre> et </pre>); la seconde supprime les balises HTML; troisième supprime les lignes vides.

Remarque: Il ne recherche pas les PPA, les sources d'apt autres, mais uniquement les paquets officiels disponibles pour la publication de debian/ubuntu que vous utilisez.

8
notpeter

Essayer:

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

Pour toutes les personnes qui pourraient encore googler ce problème en janvier 2017, vous pouvez avoir des informations intéressantes sur les versions récentes d'apt et de dpkg dans Debian 8.5 sans rien télécharger.

Liste le contenu du fichier Deb sans téléchargement:

Commencez par localiser 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: L'option --print-uris affiche l'URL du paquet deb, mais deb n'est pas téléchargé.

Puis 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: le même résultat peut être obtenu avec

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

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

Le nom de fichier de la page de manuel à l'intérieur du 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 s’affiche correctement avec l’application man.

PS: Les tuyaux ci-dessus ne fonctionnent 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
2
George Vasiliou

Il semble que ce ne soit pas possible avant de l'installer ou d'extraire la liste du fichier .deb.

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[^']\+"))

Changez language-pack-en avec le nom de votre paquet.

Il lit essentiellement le fichier .deb extrait via curl et exécute 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 du fichier .deb, la commande Shell suivante répertoriera 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, recherchez par: apt --print-uris, par exemple.

apt --print-uris install avis | grep avis
1
kenorb