Что меньше делает с rpm, и как мне получить этот текст без rpm

12

Когда я выполняю less package.rpm, less показывает мне всю метаинформацию о пакете. Что менее точно делать - есть ли в нем встроенный код, позволяющий извлекать метаинформацию, или rpm структурирован так, что первая часть выглядит просто как текстовый файл?

Я бы предположил первое, так как headздесь не очень полезно. Но чтобы перейти к реальному вопросу: если бы я хотел, чтобы grepчерез эти метаданные меньше показывалось, как я могу это сделать?

Исаак
источник

Ответы:

23

Если вы просматриваете lessman-страницу, вы заметите, lessчто в ней есть функция INPUT PREPROCESSOR.

echo $LESSOPENдля просмотра местоположения этого препроцессора и less/ vim/ catдля просмотра его содержимого.

На моей машине этот препроцессор есть /usr/bin/lesspipe.shи включает в себя следующее для rpms:

*.rpm) rpm -qpivl --changelog -- "$1"; handle_exit_status $?

По сути, он lessоткрывает файл rpmи показывает разбиение на страницы его вывода.

Очевидно, что для просмотра этой информации просто выполните вывод rpm напрямую:

grep "foo" < <(rpm -qpivl --changelog -- bar.rpm)

Или вообще (спасибо OrangeDog)

grep "foo" < <(lesspipe.sh bar.rpm)

Примечание: $LESSOPEN не просто хранит местоположение lesspipe.sh- оно начинается с |и заканчивается %sтак, что его непосредственный вызов приведет к ошибкам.

Dani_l
источник
1
Почему нет grep "foo" < <($LESSOPEN bar.rpm)? Или, может быть, даже просто $LESSOPEN bar.rpm | grep "foo".
jpmc26
4

Если бы я хотел просмотреть эти метаданные, которые меньше показывают меня, как я могу это сделать?

очень просто; если вы хотите, чтобы grep на «Версия», например:

less your.rpm | grep "Version"

Обратите внимание, что less использует rpmкоманду; так что лучше пропустить, используя меньше; и использовать rpmкоманды; нравиться:

rpm -qip /path/to/uninstalled/rpm
rpm -qi installed.rpm
Крис Мэйс
источник