Come elencare il contenuto di un pacchetto usando YUM?


320

So usare rpm per elencare il contenuto di un pacchetto ( rpm -qpil package.rpm). Tuttavia, ciò richiede la conoscenza della posizione del file .rpm sul filesystem. Una soluzione più elegante sarebbe quella di utilizzare il gestore di pacchetti, che nel mio caso è YUM. Come si può usare YUM per raggiungere questo obiettivo?


8
Senza il -pparametro ( rpm -ql packageName) non è necessario conoscere la posizione del file rpm. È praticamente il modo più semplice per ottenere "tutti i" percorsi di un pacchetto. Per alcuni esempi di output vedi la mia risposta .
Levita,

Sfortunatamente questo funziona solo con i pacchetti installati
WallStProg,

Risposte:


438

C'è un pacchetto chiamato yum-utilsche si basa su YUM e contiene uno strumento chiamato repoqueryche può farlo.

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

Combinato in un esempio:

$ 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

Su almeno un sistema RH, con rpm v4.8.0, yum v3.2.29 e repoquery v0.0.11, repoquery -l rpmnon stampa nulla.

Se si hanno questo problema, prova ad aggiungere la --installedbandiera: repoquery --installed -l rpm.


DNF Aggiornare:

Per utilizzare dnfinvece di yum-utils, utilizzare il seguente comando:

$ 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
Si noti che questo comando fallirà silenziosamente se il pacchetto indicato non esiste realmente.
Joshua Hoblitt,

17
Per cercare più velocemente i pacchetti installati, includi l'opzione --installed. es $ repoquery -lq --installed time.
Mohsenme,

nota che il nome del pacchetto fa distinzione tra maiuscole e minuscole
Putnik,

7
Dovrebbe essere aggiunto come una caratteristica di yum, IMO.
Lqueryvg,

1
Perché installare un nuovo pacchetto quando è possibile utilizzarlo rpm -ql $PACKAGE_NAME?
Isapir,

159
rpm -ql [packageName]

Esempio

# 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

Non è necessario installare yum-utils o conoscere la posizione del file rpm.


4
Questo sembra essere l'equivalente di dpkg -Ltutti coloro che non vogliono installare un altro pacchetto solo per elencare i file.
Dmitry Minkovsky,

5
@dimadima: la domanda era per yum (= sistemi basati su RHEL) che usa rpmcome gestore di pacchetti nativo ( R ed Hat P acket M anager). Se l'OP fosse su un sistema debian / ubuntu / .., dpkgsarebbe la strada da percorrere, poiché è il backend di apt .
Levita,

2
@Levit: Abbastanza sicuro di ciò che Dimadima sta cercando di dire è che questo non risponde rigorosamente alla domanda - non stai usando yumma rpmche ha le maggiori implicazioni che il pacchetto deve essere installato (che OP non ha detto esplicitamente che era il suo scenario). Stava semplicemente facendo il confronto parallelo rpm == dpkg / yum == apt per spiegare questo nel caso in cui qualcuno avesse familiarità con gli imballaggi basati su Debian e non quelli basati su RH.
TNE

3
^ 1 perché per qualche motivo questo funziona e la risposta accettata non restituisce nulla
Izkata,

2
Sembra che non ci siano comandi yumequivalenti rpm -qle repoquery -l(dal yum-utilspacchetto) per elencare i file locali e remoti, rispettivamente.


31

Non penso che tu possa elencare il contenuto di un pacchetto usando yum, ma se hai il file .rpm sul tuo sistema locale (come molto probabilmente sarà il caso di tutti i pacchetti installati), puoi usare il comando rpm per elencare il contenuto di quel pacchetto in questo modo:

rpm -qlp /path/to/fileToList.rpm

Se non hai il file del pacchetto (.rpm), ma hai installato il pacchetto, prova questo:

rpm -ql packageName

24
se non hai il file del pacchetto (.rpm), ma hai installato il pacchetto, prova rpm -ql nome pacchetto
Jared Updike

1
se non hai il pacchetto e non è installato, puoi trovare l'URL del pacchetto con youdownload --urls.
kamae,

Dovrebbe essereyumdownloader --urls
Evgeni Sergeev,

3

Ci sono diverse buone risposte qui, quindi permettimi di fornirne una terribile:

: 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 non ha il proprio tipo di pacchetto. Yum opera e aiuta a gestire gli RPM. Quindi, puoi usare yum per elencare gli RPM disponibili e quindi eseguire il comando rpm -qlp per vedere il contenuto di quel pacchetto.


0

attualmente reopqueryè integrato in dnfe yum, quindi digitando:

dnf repoquery -l <pkg-name>

elencherà il contenuto del pacchetto da un repository remoto (anche per i pacchetti che non sono ancora stati installati)

ciò significa che l'installazione di un pacchetto separato dnf-utilso yum-utilsnon è più necessaria per la funzionalità in quanto è ora supportata in modo nativo.


per elencare il contenuto dei pacchetti installati o locali ( *.rpmfile) esisterpm -ql

non penso sia possibile con yumorg dnf(non repoquerysottocomando)

Perfavore, correggimi se sbaglio

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.