2009-07-15 8 views
176

Jako przykład, szukam pliku mod_files.sh, który prawdopodobnie byłby z pakietem php-devel. Domyślam się, że yum zainstaluje plik mod_files.sh w pakiecie php-devel x86_64 5.1.6-23.2.el5_3, ale plik nie zostanie zainstalowany na moim systemie plików.Jak znaleźć pakiet rpm zawierający plik, którego szukam?

Jak się dowiedzieć, który pakiet instaluje określony plik? Szukam, gdzie niekoniecznie muszę już lokalnie pobrać pakiet, który może zawierać plik, którego szukam.

używam CentOS 5.

+6

superuser.com ___? –

+0

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

+0

Oto lepsza odpowiedź: http://unix.stackexchange.com/a/4706/39281 –

Odpowiedz

156

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

rpm -qf myfilename 

Uwaga: to polecenie nie wymaga do uruchomienia jako root (na w przeciwieństwie do sudo yum whatprovides myfilename)

+10

To mówi, które pakiety są właścicielami (lub dostarczonymi) już zainstalowanego pliku. Na szczęście tego właśnie szukałem! –

+9

'yum whatprovides ...' nie potrzebuje root ani – drs

+3

to polecenie wydaje się być bardziej wydajne niż mniam whatprovides - nie ma potrzeby pobierania aktualizacji z możliwie wolnych repozytoriów. – 80x25

1

Udajesz się do http://www.rpmfind.net i szukasz pliku.

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

+0

Ta strona jest offline! – Peter

+1

Witryna nie szuka plików; tylko nazwy pakietów z wyszukiwanym terminem. – jww

+1

@jww Wyszukiwanie plików działa dobrze przynajmniej dla mnie. Jak mówią dokumenty, możesz wyszukiwać pliki wykonywalne według ich nazwy ścieżki lub dowolnego pliku o bezwzględnej nazwie ścieżki. – nos

226

To jest stara pytanie, ale obecne odpowiedzi są niepoprawne :)

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

yum whatprovides '*bin/grep' 

zwrotów

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 wolą wyjście i prędkość narzędzia repoquery, dostępnego w pakiecie yum-utils.

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żna robić inne pytania, takie jak zawartość opakowania guide zależności, odwrotnej zależności itp

3

Dobrze znalezienie pakietu, gdy komputer jest podłączony do Internetu (repozytorium) jest jednak łatwe, gdy masz tylko dostęp do pakietów RPM na dyskach Redhat lub Centos DVD (zdarza się to często, gdy muszę odzyskać serwer i potrzebuję aplikacji) Polecam użycie poniższych poleceń, które są całkowicie niezależne od Internetu i repozytoriów. (prawdopodobnie masz dużo odinstalowanych pakietów na DVD). Powiedzmy masz zamontowany folderu opakowaniu w ~/cent_os_dvd i szukasz pakietu, który zapewnia „semanage”, a następnie można 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 
22

Najpopularniejsza odpowiedź jest niekompletna:

Od tego wyszukiwania Zwykle będzie wykonywane tylko dla plików z zainstalowanych pakietów, yum whatprovides jest tworzony bardzo szybko przez wyłączenie wszystkich zewnętrznych repo (niejawne "zainstalowane" repo nie może być wyłączone).

yum --disablerepo=* whatprovides <file> 
+0

W tym przypadku jednak OP szuka konkretnie brakującego pliku, który ** nie był zainstalowany ** w systemie, nawet po zainstalowaniu pakietu, który według niego byłby potrzebny, więc nie może użyć '--disablerepo = * ' – Randall