Comment lister le contenu d'un paquet avec YUM?


320

Je sais comment utiliser rpm pour lister le contenu d'un package ( rpm -qpil package.rpm). Cependant, cela nécessite de connaître l'emplacement du fichier .rpm sur le système de fichiers. Une solution plus élégante serait d'utiliser le gestionnaire de paquets, qui dans mon cas est YUM. Comment YUM peut-il être utilisé pour y parvenir?


8
Sans -pparam ( rpm -ql packageName), vous n'avez pas besoin de connaître l'emplacement du fichier rpm. C'est à peu près le moyen le plus simple d'obtenir "tous les" chemins d'un package. Pour un exemple de sortie, voir ma réponse .
Lévite

Malheureusement, cela ne fonctionne qu'avec les packages installés
WallStProg

Réponses:


438

Il existe un package appelé yum-utilsqui s'appuie sur YUM et contient un outil appelé repoqueryqui peut le faire.

$ repoquery --help | grep -E "list\ files" 
  -l, --list            list files in this package/group

Combiné en un seul exemple:

$ repoquery -l time
/usr/bin/time
/usr/share/doc/time-1.7
/usr/share/doc/time-1.7/COPYING
/usr/share/doc/time-1.7/NEWS
/usr/share/doc/time-1.7/README
/usr/share/info/time.info.gz

Sur au moins un système RH, avec rpm v4.8.0, yum v3.2.29 et repoquery v0.0.11, repoquery -l rpmn'imprime rien.

Si vous rencontrez ce problème, essayez d' ajouter le --installeddrapeau: repoquery --installed -l rpm.


DNF Mettre à jour:

Pour utiliser à la dnfplace de yum-utils, utilisez la commande suivante:

$ dnf repoquery -l time
/usr/bin/time
/usr/share/doc/time-1.7
/usr/share/doc/time-1.7/COPYING
/usr/share/doc/time-1.7/NEWS
/usr/share/doc/time-1.7/README
/usr/share/info/time.info.gz

12
Notez que cette commande échouera silencieusement si le package nommé n'existe pas réellement.
Joshua Hoblitt

17
Pour rechercher plus rapidement les packages installés, incluez l'option --installed. par exemple $ repoquery -lq --installed time.
Mohsenme

Veuillez noter que le nom du package est sensible à la casse
Putnik

7
Doit être ajouté comme une caractéristique de miam, OMI.
Lqueryvg

1
Pourquoi installer un nouveau package quand vous pouvez l'utiliser rpm -ql $PACKAGE_NAME?
isapir

159
rpm -ql [packageName]

Exemple

# rpm -ql php-fpm

/etc/php-fpm.conf
/etc/php-fpm.d
/etc/php-fpm.d/www.conf
/etc/sysconfig/php-fpm
...
/run/php-fpm
/usr/lib/systemd/system/php-fpm.service
/usr/sbin/php-fpm
/usr/share/doc/php-fpm-5.6.0
/usr/share/man/man8/php-fpm.8.gz
...
/var/lib/php/sessions
/var/log/php-fpm

Pas besoin d'installer yum-utils, ni de connaître l'emplacement du fichier rpm.


4
Cela semble être l'équivalent de dpkg -Lpour tous ceux qui ne veulent pas installer un autre paquet juste pour lister les fichiers.
Dmitry Minkovsky

5
@dimadima: La question était pour yum (= systèmes à base RHEL) qui utilise en rpmtant que gestionnaire de paquets natif ( R ed Hat P Acket M GESTIONNAIRE). Si l'OP devait être sur un système debian / ubuntu / .., ce dpkgserait la voie à suivre, car c'est le backend d' apt .
Lévite

2
@Levit: Je suis sûr que ce que dimadima essaie de dire, c'est que cela ne répond pas strictement à la question - vous n'utilisez pas yummais rpmcela a l'implication principale que le paquet doit être installé (ce que OP n'a pas dit explicitement était son scénario). Il faisait simplement la comparaison parallèle rpm == dpkg / yum == apt pour expliquer cela au cas où quelqu'un serait familier avec l'empaquetage basé sur Debian et non l'empaquetage basé sur RH.
TNE

3
^ 1 parce que pour une raison quelconque, cela fonctionne et la réponse acceptée ne renvoie rien
Izkata

2
Il semble qu'il n'y ait pas d' yuméquivalent aux commandes ( rpm -qlet à repoquery -lpartir du yum-utilspackage) pour répertorier les fichiers locaux et distants, respectivement.


31

Je ne pense pas que vous puissiez lister le contenu d'un package en utilisant yum, mais si vous avez le fichier .rpm sur votre système local (comme ce sera probablement le cas pour tous les packages installés), vous pouvez utiliser la commande rpm pour lister le contenu de ce paquet comme ceci:

rpm -qlp /path/to/fileToList.rpm

Si vous n'avez pas le fichier de package (.rpm), mais que vous avez le package installé, essayez ceci:

rpm -ql packageName

24
si vous n'avez pas le fichier de package (.rpm), mais que vous avez le package installé, essayez rpm -ql packageName
Jared Updike

1
si vous n'avez pas le paquet et qu'il n'est pas installé, vous pouvez trouver l'url du paquet avec youdownload --urls.
kamae

Cela devrait êtreyumdownloader --urls
Evgeni Sergeev

3

Il y a plusieurs bonnes réponses ici, alors permettez-moi d'en fournir une terrible:

: you can type in anything below, doesnt have to match anything

yum whatprovides "me with a life"

: result of the above (some liberties taken with spacing):

Loaded plugins: fastestmirror
base | 3.6 kB 00:00 
extras | 3.4 kB 00:00 
updates | 3.4 kB 00:00 
(1/4): extras/7/x86_64/primary_db | 166 kB 00:00 
(2/4): base/7/x86_64/group_gz | 155 kB 00:00 
(3/4): updates/7/x86_64/primary_db | 9.1 MB 00:04 
(4/4): base/7/x86_64/primary_db | 5.3 MB 00:05 
Determining fastest mirrors
 * base: mirrors.xmission.com
 * extras: mirrors.xmission.com
 * updates: mirrors.xmission.com
base/7/x86_64/filelists_db | 6.2 MB 00:02 
extras/7/x86_64/filelists_db | 468 kB 00:00 
updates/7/x86_64/filelists_db | 5.3 MB 00:01 
No matches found

: the key result above is that "primary_db" files were downloaded

: filelists are downloaded EVEN IF you have keepcache=0 in your yum.conf

: note you can limit this to "primary_db.sqlite" if you really want

find /var/cache/yum -name '*.sqlite'

: if you download/install a new repo, run the exact same command again
: to get the databases for the new repo

: if you know sqlite you can stop reading here

: if not heres a sample command to dump the contents

echo 'SELECT packages.name, GROUP_CONCAT(files.name, ", ") AS files FROM files JOIN packages ON (files.pkgKey = packages.pkgKey) GROUP BY packages.name LIMIT 10;' | sqlite3 -line /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite 

: remove "LIMIT 10" above for the whole list

: format chosen for proof-of-concept purposes, probably can be improved a lot

0

Yum n'a pas son propre type de package. Yum opère et aide à gérer les RPM. Vous pouvez donc utiliser yum pour répertorier les RPM disponibles, puis exécuter la commande rpm -qlp pour voir le contenu de ce package.


0

reopqueryest actuellement intégré dans, dnfet yumdonc en tapant:

dnf repoquery -l <pkg-name>

listera le contenu des packages à partir d'un référentiel distant (même pour les packages qui ne sont pas encore installés)

ce qui signifie que l'installation d'un package séparé dnf-utilsou yum-utilsn'est plus nécessaire pour la fonctionnalité car elle est désormais prise en charge en mode natif.


pour lister le contenu des packages installés ou locaux ( *.rpmfichiers), il y arpm -ql

je ne pense pas que ce soit possible avec yumorg dnf(pas de repoquerysous-commande)

S'il vous plait corrigez moi si je me trompe

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.