Как найти, какой пакет rpm поставляет файл, который я ищу?

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

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

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

Ответ 1

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

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

Ответ 2

Знать пакет, владеющий (или предоставляющим) уже установленный файл:

rpm -qf myfilename

Примечание. Эта команда не требует запуска с правами root (напротив sudo yum whatprovides myfilename)

Ответ 3

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

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

yum --disablerepo=* whatprovides <file>

Ответ 4

Хорошо найти пакет, когда вы подключены к Интернету (репозиторий), легко, однако, когда у вас есть только доступ к пакетам RPM внутри Redhat или Centos DVD (это часто случается со мной, когда мне приходится восстанавливать сервер, и мне нужно приложение ) Я рекомендую использовать приведенные ниже команды, которые полностью не зависят от Интернета и хранилищ. (возможно, на DVD-диске у вас много удаленных пакетов). Скажем, вы установили папку Package в ~/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

Ответ 5

Перейдите в http://www.rpmfind.net и найдите файл.

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