Есть ли способ поиска пакетов в именах файлов (а не в содержимом файлов) в репозитории Fedora? Это будет похоже на rpm -ql [package] | grep term для каждого пакета в репозитории, за исключением того, что было бы лучше иметь возможность выполнить команду без установленного пакета, потому что я хочу выполнить поиск в нескольких тысячах списков файлов пакетов. Вопрос, на который я пытаюсь ответить:

Какие пакеты в репозитории X доставляют файл Y?

Имя должно быть достаточным, потому что мне не нужен точный хэш.

0
the_endian 25 Сен 2020 в 18:53

1 ответ

Лучший ответ

С dnf:

dnf repoquery --disablerepo=* --enablerepo=X -f Y

С yum:

yum -y install yum-utils
repoquery --disablerepo=* --enablerepo=X -f Y

Подстановочные знаки поддерживаются для Y.

Примеры:

dnf repoquery --disablerepo=* --enablerepo=rhel-8-for-x86_64-baseos-rpms -f /usr/bin/zip
dnf repoquery --disablerepo=* --enablerepo=rhel-8-for-x86_64-baseos-rpms -f /usr/bin/zi*

Вы также можете просто yum provides Y (или dnf provides Y), но это будет включать установленные пакеты, несмотря на переключатель --disablerepo в некоторых системах.

Бонусный совет

Вы можете напрямую установить пакет, требующий определенного имени файла, просто передав его yum или dnf. Да, это работает и довольно просто:

yum install /usr/bin/zip
3
Danila Vershinin 25 Сен 2020 в 19:45
Спасибо. Интересно, чем это отличается от запуска rpm -ql для каждого пакета после загрузки всех пакетов (пустая трата места) и поиска результатов, поскольку я пробовал оба метода и заметил, что в некоторых случаях между ними есть разница, но результаты похожи.
 – 
the_endian
29 Сен 2020 в 15:41
1
Предполагается, что не должно быть никакой дельты, кроме, возможно, порядка имен файлов. Подход yum будет использовать метаданные репозитория. В каждом репозитории есть так называемые метаданные файловых списков, которые на самом деле хранятся в базе данных XML или sqlite. yum / dnf запрашивает эти метаданные. Но когда вы используете rpm -ql, вы запрашиваете пакет напрямую. Я не могу представить себе случай, когда метаданные и данные пакета имели бы дельту, отличную от простой загрузки пакетов, а репозиторий позже обновлялся новыми/измененными пакетами.
 – 
Danila Vershinin
29 Сен 2020 в 16:07