rpm que fornece um arquivo

9

Qual é o comando para listar o que o rpms poderia fornecer um arquivo em particular: o rpm que fornece arquivos já instalados ou rpms que poderiam fornecer arquivos que não estão instalados?

    
por David Nehme 19.01.2010 / 18:23

6 respostas

8

Para arquivos / pacotes já instalados:

[jb@smokey ~]$ rpm -qf /etc/sudoers
sudo-1.6.9p13-8.fc9.x86_64

Para arquivos ainda não instalados & pacotes:

[jb@smokey ~]$ yum whatprovides "/etc/sudoers"
sudo-1.6.9p13-8.fc9.x86_64 : Allows restricted root access for specified users
Repo        : updates-newkey
Matched from:
Filename    : /etc/sudoers  

sudo-1.6.9p13-4.fc9.x86_64 : Allows restricted root access for specified users
Repo        : fedora
Matched from:
Filename    : /etc/sudoers

sudo-1.6.9p13-8.fc9.x86_64 : Allows restricted root access for specified users
Repo        : installed
Matched from:
Other       : Provides-match: /etc/sudoers

Observe que "yum whatprovides" é uma correspondência de padrão, portanto, se você não tiver certeza de onde o arquivo que está procurando viveria na estrutura de diretórios, basta delimitá-lo com aspas e asteriscos:

yum whatprovides "*foo*"

Da mesma forma, se você tiver certeza de que o que está procurando é um binário que você pode fazer:

yum whatprovides "*bin/foo"
    
por 19.01.2010 / 22:12
3

Eu não sei sobre arquivos não instalados, mas para um arquivo que já está instalado, você pode usar o rpm -qif:

rpm -qif /bin/ls
Name        : coreutils                    Relocations: (not relocatable)
Version     : 5.97                              Vendor: Red Hat, Inc.
Release     : 23.el5                        Build Date: Mon 13 Jul 2009 04:21:27 AM MDT
Install Date: Fri 11 Sep 2009 04:46:01 AM MDT      Build Host: hs20-bc1-7.build.redhat.com
Group       : System Environment/Base       Source RPM: coreutils-5.97-23.el5.src.rpm
Size        : 9053874                          License: GPLv2+
Signature   : DSA/SHA1, Tue 28 Jul 2009 03:42:40 AM MDT, Key ID 5326810137017186
Packager    : Red Hat, Inc. 
URL         :
Summary     : The GNU core utilities: a set of tools commonly used in shell scripts
Description :
These are the GNU core utilities.  This package is the combination of
the old GNU fileutils, sh-utils, and textutils packages.
Se você tiver o RPM baixado, poderá consultar o que será instalado:
rpm -qilp ./Server/jzlib-1.0.7-4jpp.1.i386.rpm
warning: ./Server/jzlib-1.0.7-4jpp.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Name        : jzlib                        Relocations: (not relocatable)
Version     : 1.0.7                             Vendor: Red Hat, Inc.
Release     : 4jpp.1                        Build Date: Tue 08 Aug 2006 12:10:03 PM MDT
Install Date: (not installed)               Build Host: hs20-bc1-6.build.redhat.com
Group       : Development/Libraries/Java    Source RPM: jzlib-1.0.7-4jpp.1.src.rpm
Size        : 280436                           License: BSD-style
Signature   : DSA/SHA1, Thu 18 Jan 2007 08:49:50 AM MST, Key ID 5326810137017186
Packager    : Red Hat, Inc. 
URL         : 
Summary     : JZlib re-implementation of zlib in pure Java
Description :
The zlib is designed to be a free, general-purpose, legally unencumbered
-- that is, not covered by any patents -- lossless data-compression
library for use on virtually any computer hardware and operating system.
The zlib was written by Jean-loup Gailly (compression) and Mark Adler
(decompression).
/usr/lib/gcj/jzlib/jzlib-1.0.7.jar.db
/usr/lib/gcj/jzlib/jzlib-1.0.7.jar.so
/usr/share/doc/jzlib-1.0.7
/usr/share/doc/jzlib-1.0.7/LICENSE.txt
/usr/share/java/jzlib-1.0.7.jar
/usr/share/java/jzlib.jar
 você pode omitir o "-i" das opções se não se importar em ver todas as informações sobre o RPM.     
por 19.01.2010 / 21:55
2

Em repositórios baseados no yum, você pode tentar algo como yum provides */filename

    
por 19.01.2010 / 18:44
1

afaik, não é possível com rpm puro. O rpm fornece isso apenas para pacotes instalados com a opção --whatprovides .

quando você pode usar o yum, tente yum provides <filename> para pesquisar no repositório.

    
por 19.01.2010 / 18:51
1

Se você não quiser (ou não pode) usar o yum (por exemplo, em uma máquina off-line), você pode pesquisar dentro de RPMs não instalados fazendo

# rpm -qp --filesbypkg *rpms-to-search-in* | grep *file-to-search-for*

Isso pode levar algum tempo, por isso seja paciente ao pesquisar entre * .rpm em um repositório grande, como um DVD de instalação, por exemplo. Mas, ao contrário de "-qpl", "-qp --filesbypkg" listará o arquivo e o RPM ao qual ele pertence, por exemplo:

# rpm -qpl p*.rpm|grep libpq.so.4
/usr/lib/libpq.so.4
/usr/lib64/libpq.so.4

# rpm -qp --filesbypkg p*.rpm|grep libpq.so.4
postgresql-libs          /usr/lib/libpq.so.4
postgresql-libs          /usr/lib64/libpq.so.4

em cujo caso a duplicata aparente é devida à presença de pacotes i386 e x86_64 (tornados óbvios a partir da string "lib64").

    
por 23.03.2011 / 00:33
-3

Eu não tenho certeza de como fazer isso com o RPMS, mas com o Debian e o Ubuntu você pode usar o programa apt-file

    
por 19.01.2010 / 18:40

Tags