Come trovo quale pacchetto rpm fornisce un file che sto cercando?


207

Ad esempio, sto cercando un mod_files.shfile che presumibilmente verrebbe fornito con il php-develpacchetto. Ho immaginato che yumavrebbe installato il mod_files.shfile con il php-devel x86_64 5.1.6-23.2.el5_3pacchetto, ma il file sembra non essere installato sul mio filesystem.

Come faccio a sapere quale pacchetto installa un file specifico? Sto cercando dove non ho necessariamente già scaricato localmente il pacchetto che potrebbe includere il file che sto cercando.

Sto usando CentOS 5.


7
superuser.com ___?
Grzegorz Oledzki,

@Grzegorz Un buon punto, ho votato per trasferirmi.
rjh

ecco una risposta migliore: unix.stackexchange.com/a/4706/39281
Sam Watkins,

1
@SamWatkins che risponderà funzionerà solo se il pacchetto che fornisce il file che stai cercando è già installato sul sistema. Se il pacchetto non è installato (come dice l'OP), non è possibile utilizzare rpm, è necessario utilizzare yum.
rjh

Risposte:


266

Questa è una vecchia domanda, ma le risposte attuali sono errate :)

Usa yum whatprovides , con il percorso assoluto del file desiderato (che può essere jolly). Per esempio:

yum whatprovides '*bin/grep'

ritorna

grep-2.5.1-55.el5.x86_64 : The GNU versions of grep pattern matching utilities.
Repo        : base
Matched from:
Filename    : /bin/grep

È possibile preferire l'output e la velocità dello repoquerystrumento, disponibile nel yum-utilspacchetto.

sudo yum install yum-utils
repoquery --whatprovides '*bin/grep'
grep-0:2.5.1-55.el5.x86_64
grep-0:2.5.1-55.el5.x86_64

repoquery può fare altre query come elencare il contenuto del pacchetto, dipendenze, dipendenze inverse, ecc.


199

Per conoscere il pacchetto che possiede (o fornisce) un file già installato:

rpm -qf myfilename

4
questo comando sembra essere più efficiente di yum whatprovides - non è necessario ottenere aggiornamenti da repository forse lenti.
80x25,

Questa versione funziona anche su distro non basati su Redhat che usano ancora rpm come openSUSE
simotek

5
Mi sembra rpm -qf <filename>più adatto per determinare quale pacchetto fornisce un'applicazione installata (poiché potrebbe essere diverso da quello che si trova nella cache del repository yum corrente) ed yum whatprovides <filename>è più adatto per determinare quale pacchetto fornisce un'installazione ancora da installare applicazione. Ognuno ha il suo scopo.
StockB

Inoltre, yum whatprovides ...richiede root solo se l'applicazione è un pacchetto root (ovvero risiede in /sbin). Tuttavia, rpm -qf ...richiede anche root per leggere rpms da /sbin. Pertanto, propongo che i requisiti di root siano funzionalmente equivalenti per entrambi i metodi.
StockB

1
Chiunque usi questo comando, si noti che è necessario utilizzare il percorso completo del file + nome file e non solo il nome del file.
Ashish,

31

La risposta più popolare è incompleta:

Poiché questa ricerca verrà generalmente eseguita solo per i file dai pacchetti installati, ciò che viene fornito è reso velocissimo disabilitando tutti i repository esterni (il repository implicito "installato" non può essere disabilitato).

yum --disablerepo=* whatprovides <file>

4
In questo caso, tuttavia, l'OP è specificamente alla ricerca di un file mancante che non è stato installato sul sistema, anche dopo aver installato un pacchetto che pensava avrebbe avuto, quindi non può usare--disablerepo=*
Randall

4

Vai su http://www.rpmfind.net e cerca il file.

Otterrai risultati per molte distro e versioni diverse, ma molto probabilmente appariranno anche Fedora e / o CentOS e conoscerai il nome del pacchetto da installare con yum


Il sito è offline!
Peter,

1
Il sito Web non sembra cercare file; solo i nomi dei pacchetti con il termine di ricerca.
jw

1
La ricerca di file funziona bene anche per me. Come dice la documentazione, è possibile cercare file eseguibili in base al loro nome percorso singolo o qualsiasi file con il nome percorso assoluto.
nn.

4

Ben trovare il pacchetto quando si è connessi a Internet (repository) è facile, tuttavia quando si ha accesso ai pacchetti RPM solo nel DVD di Redhat o Centos (ciò accade spesso a me quando devo ripristinare un server e ho bisogno di un'applicazione) usando i comandi sottostanti che sono completamente indipendenti da internet e dai repository. (presumibilmente hai un sacco di pacchetti disinstallati in un DVD). Supponiamo che tu abbia montato la cartella del pacchetto in ~ / cent_os_dvd e stai cercando un pacchetto che fornisce "semanage", quindi puoi eseguire:

for file in `find ~/cent_os_dvd/ -iname '*.rpm'`;  do rpm -qlp $file |grep '.*bin/semanage';  if [ $? -eq 0 ]; then echo "is in";echo $file  ; fi;  done


0

Puoi farlo allo stesso modo qui ma con il tuo pacchetto. Nel mio caso, lo eralsb_release

Correre: yum whatprovides lsb_release

Risposta:

redhat-lsb-core-4.1-24.el7.i686 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-24.el7.x86_64 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-27.el7.i686 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-27.el7.x86_64 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release`

Esegui per installare: yum install redhat-lsb-core

Il nome del pacchetto DOVREBBE essere senza numero e tipo di sistema in modo che yum packager possa scegliere ciò che è meglio per lui.

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.