Как найти, какой пакет 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