
Какая команда выводит список пакетов RPM, которые могут предоставить определенный файл: RPM, которые предоставляют уже установленные файлы, или RPM, которые могут предоставить неустановленные файлы?
решение1
Для уже установленных файлов/пакетов:
[jb@smokey ~]$ rpm -qf /etc/sudoers sudo-1.6.9p13-8.fc9.x86_64
Для еще не установленных файлов и пакетов:
[jb@smokey ~]$ yum whatprovides "/etc/sudoers" sudo-1.6.9p13-8.fc9.x86_64 : Разрешает ограниченный доступ root для указанных пользователей Репозиторий: обновления-newkey Совпало с: Имя файла: /etc/sudoers sudo-1.6.9p13-4.fc9.x86_64 : Разрешает ограниченный доступ root для указанных пользователей Репозиторий: fedora Совпало с: Имя файла: /etc/sudoers sudo-1.6.9p13-8.fc9.x86_64 : Разрешает ограниченный доступ root для указанных пользователей Репозиторий: установлен Совпало с: Другое: Предоставляет-соответствие: /etc/sudoers
Обратите внимание, что «yum whatprovides» — это сопоставление с шаблоном, поэтому, если вы не уверены, где в структуре каталогов будет находиться искомый файл, просто заключите его в кавычки и звездочки:
yum whatprovides "*foo*"
Аналогично, если вы уверены, что ищете двоичный файл, вы можете сделать следующее:
yum whatprovides "*bin/foo"
решение2
Я не знаю насчет файлов, которые еще не установлены, но для файла, который уже установлен, вы можете использовать rpm -qif:
об/мин -qif /bin/ls Имя: coreutils Перемещения: (неперемещаемые) Версия: 5.97 Поставщик: Red Hat, Inc. Выпуск: 23.el5 Дата сборки: Пн 13 Июл 2009 04:21:27 AM MDT Дата установки: пт 11 сент 2009 04:46:01 AM MDT Хост сборки: hs20-bc1-7.build.redhat.com Группа: Системная среда/Базовый исходный RPM: coreutils-5.97-23.el5.src.rpm Размер: 9053874 Лицензия: GPLv2+ Подпись: DSA/SHA1, Вт 28 июля 2009 г. 03:42:40 AM MDT, идентификатор ключа 5326810137017186 Упаковщик: Red Hat, Inc. URL-адрес: Резюме: Основные утилиты GNU: набор инструментов, обычно используемых в скриптах оболочки. Описание : Это основные утилиты GNU. Этот пакет представляет собой комбинацию старые пакеты GNU fileutils, sh-utils и textutils.Если у вас загружен RPM, вы можете выполнить запрос, чтобы узнать, что будет установлено:
об/мин -qilp ./Server/jzlib-1.0.7-4jpp.1.i386.rpm предупреждение: ./Server/jzlib-1.0.7-4jpp.1.i386.rpm: Подпись DSA заголовка V3: NOKEY, идентификатор ключа 37017186 Имя: jzlib Перемещения: (неперемещаемые) Версия: 1.0.7 Поставщик: Red Hat, Inc. Выпуск: 4jpp.1 Дата сборки: Вт 08 авг 2006 12:10:03 PM MDT Дата установки: (не установлено) Хост сборки: hs20-bc1-6.build.redhat.com Группа: Разработка/Библиотеки/Исходный RPM Java: jzlib-1.0.7-4jpp.1.src.rpm Размер: 280436 Лицензия: BSD-style Подпись: DSA/SHA1, четверг, 18 января 2007 г., 08:49:50 по Гринвичу, идентификатор ключа 5326810137017186 Упаковщик: Red Hat, Inc. URL-адрес: Резюме: JZlib — повторная реализация zlib на чистом Java Описание : Zlib разработан как бесплатная, универсальная, юридически не обремененная библиотека. -- то есть, не защищенное никакими патентами -- сжатие данных без потерь библиотека для использования практически на любом компьютерном оборудовании и операционной системе. Zlib был написан Жаном-Лу Гайи (сжатие) и Марком Адлером. (декомпрессия). /usr/lib/gcj/jzlib/jzlib-1.0.7.jar.db /usr/lib/gcj/jzlib/jzlib-1.0.7.jar.so /usr/share/doc/jzlib-1.0.7 /usr/share/doc/jzlib-1.0.7/LICENSE.txt /usr/share/java/jzlib-1.0.7.jar /usr/share/java/jzlib.jarВы можете опустить «-i» в параметрах, если вас не интересует вся информация о RPM.
решение3
В репозиториях на основе yum можно попробовать что-то вроде yum provides */filename
решение4
Если вы не хотите (или не можете) использовать yum (например, на машине, отключенной от сети), вы можете выполнить поиск внутри неустановленных RPM-пакетов, выполнив команду
# rpm -qp --filesbypkg *rpms-to-search-in* | grep *file-to-search-for*
Это может занять некоторое время, поэтому будьте терпеливы при поиске среди *.rpm в большом репозитории, например, на установочном DVD. Но, в отличие от "-qpl", "-qp --filesbypkg" выведет как файл, так и RPM, к которому он принадлежит, например:
# rpm -qpl p*.rpm|grep libpq.so.4
/usr/lib/libpq.so.4
/usr/lib64/libpq.so.4
# rpm -qp --filesbypkg p*.rpm|grep libpq.so.4
postgresql-libs /usr/lib/libpq.so.4
postgresql-libs /usr/lib64/libpq.so.4
в этом случае кажущееся дублирование обусловлено наличием пакетов i386 и x86_64 (что очевидно из строки «lib64»).