Como encontro qual pacote rpm fornece um arquivo que estou procurando?

207

Como exemplo, estou procurando um mod_files.sharquivo que provavelmente viria com o php-develpacote. Eu imaginei que yuminstalaria omod_files.sh arquivo com o php-devel x86_64 5.1.6-23.2.el5_3pacote, mas o arquivo parece não estar instalado no meu sistema de arquivos.

Como descubro qual pacote instala um arquivo específico? Estou procurando onde ainda não baixei o pacote necessariamente localmente, o que pode incluir o arquivo que estou procurando.

Estou usando o CentOS 5.

em que lugar
fonte
7
superuser.com ___?
Grzegorz Oledzki
@Grzegorz Bom ponto, eu votei para avançar.
Rjh 24/03
aqui está uma resposta melhor: unix.stackexchange.com/a/4706/39281
Sam Watkins
1
O @SamWatkins que responder apenas funcionará se o pacote que fornece o arquivo que você está procurando já estiver instalado no sistema. Se o pacote não estiver instalado (como o OP diz), você não poderá usá- rpmlo, precisará usá-lo yum.
Rjh 4/10

Respostas:

266

Esta é uma pergunta antiga, mas as respostas atuais estão incorretas :)

Use yum whatprovides , com o caminho absoluto para o arquivo que você deseja (que pode ser curinga). Por exemplo:

yum whatprovides '*bin/grep'

Devoluções

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

Você pode preferir a saída e a velocidade da repoqueryferramenta, disponíveis no yum-utilspacote.

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 pode fazer outras consultas, como listar o conteúdo do pacote, dependências, dependências reversas etc.

rjh
fonte
199

Para conhecer o pacote que possui (ou fornece) um arquivo já instalado:

rpm -qf myfilename
dj_segfault
fonte
4
esse comando parece ser mais eficiente que o yum whatprovides - não é necessário obter atualizações de repositórios possivelmente lentos.
80x25
Esta versão também funciona em distro não com base redhat é que o uso ainda do rpm, como openSUSE
simotek
5
Parece-me que rpm -qf <filename>é mais adequado para determinar qual pacote fornece um aplicativo instalado (já que pode ser diferente do que está no cache atual do repositório yum) e yum whatprovides <filename>é mais adequado para determinar qual pacote fornece um aplicativo ainda a ser instalado inscrição. Cada um tem seu próprio propósito.
StockB
Além disso, yum whatprovides ...somente requer root se o aplicativo for um pacote raiz (ou seja, reside em /sbin). No entanto, rpm -qf ...também requer root para ler rpms /sbin. Portanto, proponho que os requisitos raiz sejam funcionalmente equivalentes para ambos os métodos.
StockB
1
Qualquer pessoa que use este comando, observe que é necessário usar o caminho completo do arquivo + o nome do arquivo, e não apenas o nome do arquivo.
Ashish
31

A resposta mais popular está incompleta:

Como essa pesquisa geralmente é executada apenas para arquivos de pacotes instalados, o yum whatprovides é feito de maneira incrivelmente rápida ao desativar todos os repositórios externos (o repositório implícito "instalado" não pode ser desativado).

yum --disablerepo=* whatprovides <file>
user93374
fonte
4
Neste caso, no entanto, o OP é especificamente à procura de um arquivo ausente que foi não instalado no sistema, mesmo depois de instalar um pacote que ele pensou que iria tê-lo, então ele não pode usar--disablerepo=*
Randall
4

Você acessa http://www.rpmfind.net e procura o arquivo.

Você obterá resultados para várias distribuições e versões diferentes, mas é bem provável que o Fedora e / ou CentOS também apareçam e você saberá o nome do pacote para instalar com o yum

n
fonte
Este site está offline!
Peter
1
O site não parece procurar arquivos; apenas nomes de pacotes com o termo de pesquisa.
JWW
1
@jww Procurar arquivos funciona bem para mim, pelo menos. Como a documentação diz, você pode procurar por executáveis ​​pelo nome de caminho único ou por qualquer arquivo com o nome absoluto do caminho.
Nos
4

É fácil encontrar o pacote quando você está conectado à Internet (repositório), no entanto, quando você só tem acesso aos pacotes RPM no Redhat ou no Centos DVD (isso acontece com frequência quando preciso recuperar um servidor e preciso de um aplicativo). usando os comandos abaixo, que são completamente independentes da Internet e dos repositórios. (supostamente você tem muitos pacotes desinstalados em um DVD). Digamos que você montou a pasta Package em ~ / cent_os_dvd e você está procurando por um pacote que forneça "semelhança" para poder executar:

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
Arash
fonte
0

Você pode fazer isso da mesma maneira aqui, mas com o seu pacote. No meu caso, foilsb_release

Corre: yum whatprovides lsb_release

Resposta:

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`

Execute para instalar: yum install redhat-lsb-core

O nome do pacote DEVE estar sem número e tipo de sistema para que o yum packager possa escolher o que é melhor para ele.

matson kepson
fonte