2009-07-15 2 views
176

В качестве примера я ищу файл mod_files.sh, который предположительно будет поставляться с пакетом php-devel. Я предположил, что yum установит файл mod_files.sh с пакетом php-devel x86_64 5.1.6-23.2.el5_3, но файл, похоже, не будет установлен в моей файловой системе.Как найти, какой пакет RPM поставляет файл, который я ищу?

Как узнать, какой пакет устанавливает конкретный файл? Я ищу, где я не обязательно уже локально загружал пакет, который может включать файл, который я ищу.

Я использую CentOS 5.

+6

superuser.com ___? –

+0

@Grzegorz Хорошая мысль, я поставил голосование, чтобы двигаться. – rjh

+0

вот лучший ответ: http://unix.stackexchange.com/a/4706/39281 –

ответ

156

Чтобы узнать пакет, владеющего (или обеспечивающий) уже установленный файл:

rpm -qf myfilename 

Примечание: эта команда не требует, чтобы быть запущен как корень (на в отличие от sudo yum whatprovides myfilename)

+10

Это указывает, какие пакеты владеют (или предоставляются) уже установленным файлом. К счастью, это то, что я искал! –

+9

'yum whatprovides ...' не нуждается ни в корне, либо – drs

+3

эта команда выглядит более эффективной, чем yum whatprovides - нет необходимости получать обновления из, возможно, медленных репозиториев. – 80x25

1

Вы идете на http://www.rpmfind.net и ищите файл.

Вы получите результаты для многого различных дистрибутивов и версий, но вполне вероятно, Fedora и/или CentOS появится и вы тоже будете знать имя пакета для установки с нями

+0

Этот сайт не в сети! – Peter

+1

Веб-сайт не ищет файлы; только имена пакетов с поисковым запросом. – jww

+1

@jww Поиск файлов для меня отлично работает. Как говорится в документах, вы можете искать исполняемые файлы по их одному имени пути или любому файлу с абсолютным именем пути. – nos

226

Это старое вопрос, но текущие ответы неверны :)

Используйте yum whatprovides, с абсолютным путем к файлу, который вы хотите (который может быть подстановочным). Например:

yum whatprovides '*bin/grep' 

возвратов

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

Вы можете предпочесть мощность и скорость repoquery инструмента, доступного в 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 могут сделать другие запросы, такие как содержание список пакетов, зависимостей, обратной зависимости, и т.д.

3

Ну найти пакет, когда вы подключены к Интернету (хранилище) легко, однако если у вас есть только доступ к пакетам RPM внутри Redhat или Centos DVD (это часто случается со мной, когда мне нужно восстановить сервер, и мне нужно приложение). Я рекомендую использовать приведенные ниже команды, которые полностью независимы от Интернета и хранилищ. (возможно, на DVD-диске у вас много удаленных пакетов). Допустим, вы смонтировали папку пакета в ~/cent_os_dvd и вы ищете пакет, который обеспечивает «semanage», то вы можете запустить:

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

Самый популярный ответ является неполным:

С поиском обычно будет выполняться только для файлов из установленных пакетов, yum whatprovides выполняется быстро, отключая все внешние репозитории (неявное «установленное» репо не может быть отключено).

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

В этом случае OP, в частности, ищет отсутствующий файл, который ** не установлен ** в системе, даже после установки пакета, который, как он думал, будет иметь его, поэтому он не может использовать '--disablerepo = * ' – Randall

Смежные вопросы