Как мне узнать, какой пакет rpm содержит файл, который я ищу? - PullRequest
198 голосов
/ 15 июля 2009

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

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

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

Ответы [ 7 ]

259 голосов
/ 24 марта 2010

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

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

195 голосов
/ 15 июля 2009

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

rpm -qf myfilename

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

30 голосов
/ 12 декабря 2015

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

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

yum --disablerepo=* whatprovides <file>
4 голосов
/ 01 февраля 2014

Хорошо найти пакет, когда вы подключены к Интернету (репозиторий), но когда у вас есть доступ к 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
3 голосов
/ 16 июля 2009

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

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

0 голосов
/ 06 апреля 2019

Используя только утилиту rpm, это должно работать в любой ОС, имеющей rpm:

rpm -q --whatprovides [file name]

Ref. https://www.thegeekdiary.com/how-to-find-which-rpm-package-provides-a-specific-file-or-library-in-rhel-centos/

0 голосов
/ 02 августа 2018

Вы можете сделать это здесь, но с вашим пакетом. В моем случае это было lsb_release

Прогон: yum whatprovides lsb_release

Ответ:

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`

Запустите для установки: yum install redhat-lsb-core

Имя пакета ДОЛЖНО быть без номера и типа системы, чтобы упаковщик yum мог выбрать, что лучше для него.

...