Как составить список содержимого пакета, используя YUM?

320

Я знаю, как использовать rpm для отображения содержимого пакета ( rpm -qpil package.rpm). Однако для этого необходимо знать местоположение файла .rpm в файловой системе. Более элегантным решением было бы использовать менеджер пакетов, который в моем случае - YUM. Как можно использовать YUM для достижения этой цели?

Лорин Хохштайн
источник
8
Без -pparam ( rpm -ql packageName) вам не нужно знать местоположение файла rpm. Это в значительной степени самый простой способ получить «все» пути пакета. Для некоторых выходных данных см. Мой ответ .
Левит
К сожалению, это работает только с установленными пакетами
WallStProg

Ответы:

438

Существует пакет, который называется yum-utilsYUM и содержит инструмент, repoqueryкоторый может это сделать.

$ repoquery --help | grep -E "list\ files" 
  -l, --list            list files in this package/group

Объединены в один пример:

$ repoquery -l time
/usr/bin/time
/usr/share/doc/time-1.7
/usr/share/doc/time-1.7/COPYING
/usr/share/doc/time-1.7/NEWS
/usr/share/doc/time-1.7/README
/usr/share/info/time.info.gz

По крайней мере в одной системе RH с rpm v4.8.0, yum v3.2.29 и repoquery v0.0.11 repoquery -l rpmничего не печатается.

Если у Вас есть этот вопрос, попробуйте добавить --installedфлаг: repoquery --installed -l rpm.


DNF Обновить:

Чтобы использовать dnfвместо yum-utils, используйте следующую команду:

$ dnf repoquery -l time
/usr/bin/time
/usr/share/doc/time-1.7
/usr/share/doc/time-1.7/COPYING
/usr/share/doc/time-1.7/NEWS
/usr/share/doc/time-1.7/README
/usr/share/info/time.info.gz
Томас Вандер Стичеле
источник
12
Обратите внимание, что эта команда не будет выполнена автоматически, если указанный пакет на самом деле не существует.
Джошуа Хоблитт
17
Чтобы быстрее искать установленные пакеты, включите опцию --installed. например $ repoquery -lq --installed time.
Мохсенме
Пожалуйста, обратите внимание, что имя пакета чувствительно к регистру
Putnik
7
Должен быть добавлен в качестве функции Yum, IMO.
Lqueryvg
1
Зачем устанавливать новый пакет, когда вы можете использовать rpm -ql $PACKAGE_NAME?
Исапир
159
rpm -ql [packageName]

пример

# rpm -ql php-fpm

/etc/php-fpm.conf
/etc/php-fpm.d
/etc/php-fpm.d/www.conf
/etc/sysconfig/php-fpm
...
/run/php-fpm
/usr/lib/systemd/system/php-fpm.service
/usr/sbin/php-fpm
/usr/share/doc/php-fpm-5.6.0
/usr/share/man/man8/php-fpm.8.gz
...
/var/lib/php/sessions
/var/log/php-fpm

Нет необходимости устанавливать yum-utils или знать местоположение файла rpm.

левит
источник
4
Похоже, что это эквивалентно dpkg -Lвсем, кто не хочет устанавливать другой пакет просто для просмотра списка файлов.
Дмитрий Минковский
5
@dimadima: Вопрос был о yum (= системах на основе RHEL), который использует в rpmкачестве собственного менеджера пакетов ( R ed Hat P acket M anager). Если OP будет работать в системе debian / ubuntu / .., dpkgэто будет путь, так как это бэкэнд для apt .
Левит
2
@Levit: Я уверен, что dimadima пытается сказать, что это не дает точного ответа на вопрос - вы не используете, yumно rpmэто имеет главное значение, что пакет должен быть установлен (который OP не сказал явно его сценарий). Он просто проводил параллельное сравнение rpm == dpkg / yum == apt, чтобы объяснить это на тот случай, если кто-то знаком с упаковкой на основе Debian, а не с упаковкой на основе RH.
TNE
3
^ 1, потому что по какой-то причине это работает, и принятый ответ ничего не возвращает
Izkata
2
Кажется, что нет yumэквивалентных команд rpm -qlи repoquery -l(из yum-utilsпакета) для вывода списка локальных и удаленных файлов соответственно.
78
$ yum install -y yum-utils

$ repoquery -l packagename
Хусейн Озан ТОК
источник
31

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

rpm -qlp /path/to/fileToList.rpm

Если у вас нет файла пакета (.rpm), но у вас установлен пакет, попробуйте это:

rpm -ql packageName
Thomi
источник
24
если у вас нет файла пакета (.rpm), но у вас установлен пакет, попробуйте rpm -ql packageName
Jared Updike
1
Если у вас нет пакета, и он не установлен, вы можете найти URL пакета с помощью youdownload --urls.
Камаэ
Это должно бытьyumdownloader --urls
Евгений Сергеев
3

Здесь есть несколько хороших ответов, поэтому позвольте мне дать один ужасный:

: you can type in anything below, doesnt have to match anything

yum whatprovides "me with a life"

: result of the above (some liberties taken with spacing):

Loaded plugins: fastestmirror
base | 3.6 kB 00:00 
extras | 3.4 kB 00:00 
updates | 3.4 kB 00:00 
(1/4): extras/7/x86_64/primary_db | 166 kB 00:00 
(2/4): base/7/x86_64/group_gz | 155 kB 00:00 
(3/4): updates/7/x86_64/primary_db | 9.1 MB 00:04 
(4/4): base/7/x86_64/primary_db | 5.3 MB 00:05 
Determining fastest mirrors
 * base: mirrors.xmission.com
 * extras: mirrors.xmission.com
 * updates: mirrors.xmission.com
base/7/x86_64/filelists_db | 6.2 MB 00:02 
extras/7/x86_64/filelists_db | 468 kB 00:00 
updates/7/x86_64/filelists_db | 5.3 MB 00:01 
No matches found

: the key result above is that "primary_db" files were downloaded

: filelists are downloaded EVEN IF you have keepcache=0 in your yum.conf

: note you can limit this to "primary_db.sqlite" if you really want

find /var/cache/yum -name '*.sqlite'

: if you download/install a new repo, run the exact same command again
: to get the databases for the new repo

: if you know sqlite you can stop reading here

: if not heres a sample command to dump the contents

echo 'SELECT packages.name, GROUP_CONCAT(files.name, ", ") AS files FROM files JOIN packages ON (files.pkgKey = packages.pkgKey) GROUP BY packages.name LIMIT 10;' | sqlite3 -line /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite 

: remove "LIMIT 10" above for the whole list

: format chosen for proof-of-concept purposes, probably can be improved a lot

источник
0

У Yum нет собственного типа пакета. Yum работает и помогает управлять RPM. Таким образом, вы можете использовать yum для просмотра списка доступных RPM, а затем запустить команду rpm -qlp, чтобы просмотреть содержимое этого пакета.

Haabda
источник
0

в настоящее время reopqueryинтегрируется в dnfи yum, таким образом, набрав:

dnf repoquery -l <pkg-name>

перечислит содержимое пакета из удаленного репозитория (даже для пакетов, которые еще не установлены)

это означает, что установка отдельного пакета dnf-utilsили yum-utilsпакета больше не требуется для функциональности, поскольку теперь она поддерживается изначально.


для просмотра списка установленных или локальных ( *.rpmфайлов) пакетовrpm -ql

я не думаю, что это возможно с yumорг dnf(не repoqueryподкоманда)

поправьте меня пожалуйста если я не прав


источник