Jak znaleźć pakiet RPM, który zawiera plik, którego szukam?


207

Na przykład szukam mod_files.shpliku, który prawdopodobnie byłby dostarczany z php-develpakietem. Domyślam się, yumże zainstaluje mod_files.shplik z php-devel x86_64 5.1.6-23.2.el5_3pakietem, ale wydaje się, że plik nie został zainstalowany w moim systemie plików.

Jak sprawdzić, który pakiet instaluje określony plik? Szukam, gdzie niekoniecznie już pobrałem pakiet lokalnie, który może zawierać szukany plik.

Używam CentOS 5.


7
superuser.com ___?
Grzegorz Oledzki

@Grzegorz Dobra uwaga, oddałem głos, aby się przenieść.
rjh


1
@SamWatkins, która odpowiedź będzie działać, tylko jeśli pakiet dostarczający poszukiwany plik jest już zainstalowany w systemie. Jeśli pakiet nie jest zainstalowany (jak mówi PO), to nie możesz użyć rpm, musisz użyć yum.
rjh

Odpowiedzi:


266

To stare pytanie, ale obecne odpowiedzi są niepoprawne :)

Użyj yum whatprovides , z bezwzględną ścieżką do żądanego pliku (który może być wieloznaczny). Na przykład:

yum whatprovides '*bin/grep'

Zwroty

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

Możesz preferować wydajność i szybkość repoquerynarzędzia, dostępnego w yum-utilspakiecie.

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 może wykonywać inne zapytania, takie jak wyświetlanie zawartości pakietu, zależności, zależności odwrotne itp.


199

Aby poznać pakiet będący właścicielem (lub udostępniający) już zainstalowany plik:

rpm -qf myfilename

4
to polecenie wydaje się być bardziej wydajne niż yum, co zapewnia - nie trzeba pobierać aktualizacji z możliwie wolnych repozytoriów.
80x25

Ta wersja działa również na dystrybucjach nie opartych na redhat, które nadal używają
rpmów

5
Wydaje mi się, że rpm -qf <filename>najlepiej nadaje się do ustalenia, który pakiet zapewnia zainstalowaną aplikację (ponieważ może się różnić od tego, co znajduje się w bieżącej pamięci podręcznej repozytorium yum) i yum whatprovides <filename>najlepiej nadaje się do ustalenia, który pakiet zapewnia instalację podanie. Każdy ma swój własny cel.
StockB

Ponadto yum whatprovides ...wymaga tylko roota, jeśli aplikacja jest pakietem root (tzn. Znajduje się w nim /sbin). Jednak rpm -qf ...wymaga również roota, aby odczytać rpms z /sbin. Dlatego proponuję, aby wymagania root były funkcjonalnie równoważne dla obu metod.
StockB

1
Każdy, kto używa tego polecenia, pamiętaj, że musisz użyć pełnej ścieżki do pliku + nazwy pliku, a nie tylko nazwy pliku.
Ashish

31

Najpopularniejsza odpowiedź jest niepełna:

Ponieważ to wyszukiwanie będzie na ogół wykonywane tylko dla plików z zainstalowanych pakietów, yum whatprovides jest błyskawicznie szybkie przez wyłączenie wszystkich zewnętrznych repozytoriów (nie można wyłączyć domyślnego repozytorium „zainstalowanego”).

yum --disablerepo=* whatprovides <file>

4
W tym przypadku jednak OP szuka konkretnie brakującego pliku, który nie został zainstalowany w systemie, nawet po zainstalowaniu pakietu, o którym myślał, że będzie go mieć, więc nie może go użyć--disablerepo=*
Randall

4

Idziesz do http://www.rpmfind.net i wyszukaj plik.

Otrzymasz wyniki dla wielu różnych dystrybucji i wersji, ale całkiem prawdopodobne, że Fedora i / lub CentOS również się pojawią i będziesz znać nazwę pakietu do zainstalowania z yum


Ta strona jest offline!
Peter,

1
Witryna nie wydaje się wyszukiwać plików; tylko nazwy pakietów z wyszukiwanym terminem.
jww

1
@jww Wyszukiwanie plików działa przynajmniej dla mnie dobrze. Jak głosi dokument, możesz wyszukiwać pliki wykonywalne według nazwy pojedynczej ścieżki lub dowolnego pliku z bezwzględną nazwą ścieżki.
nos

4

Znalezienie pakietu po podłączeniu do Internetu (repozytorium) jest łatwe, jednak gdy masz dostęp tylko do pakietów RPM na dysku DVD Redhat lub Centos (zdarza mi się to często, gdy muszę odzyskać serwer i potrzebuję aplikacji). Polecam za pomocą poniższych poleceń, które są całkowicie niezależne od Internetu i repozytoriów. (przypuszczalnie masz wiele odinstalowanych pakietów na DVD). Załóżmy, że masz zamontowany folder Package w ~ / cent_os_dvd i szukasz pakietu zapewniającego „semanage”, a następnie możesz uruchomić:

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

Możesz to zrobić podobnie tutaj, ale z pakietem. W moim przypadku tak byłolsb_release

Biegać: yum whatprovides lsb_release

Odpowiedź:

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`

Uruchom, aby zainstalować: yum install redhat-lsb-core

Nazwa pakietu POWINNA być bez numeru i typu systemu, aby yum packager mógł wybrać to, co jest dla niego najlepsze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.