Co mniej robi z rpm i jak mogę uzyskać ten tekst bez rpm

12

Kiedy wykonuję less package.rpm, less pokazuje mi różnego rodzaju meta informacje o pakiecie. Co robi mniej dokładnie - czy ma wbudowany kod, aby móc wyodrębnić meta informacje, czy też struktura RPM ma taką strukturę, że pierwsza część wygląda jak plik tekstowy?

Zakładam, że to pierwsze, ponieważ headnie jest tu tak pomocne. Ale, aby przejść do prawdziwego pytania: jeśli chciałbym przejść grepprzez te metadane mniej pokazujące mi, jak mogę to osiągnąć?

Izaak
źródło

Odpowiedzi:

23

Jeśli przejrzysz lessstronę man, zauważysz, że lessma funkcję INPUT PREPROCESSOR.

echo $LESSOPENaby zobaczyć lokalizację tego preprocesora i użyj less/ vim/, cataby zobaczyć jego zawartość.

Na moim komputerze jest to preprocesor /usr/bin/lesspipe.shi zawiera on następujące dla rpms:

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

W efekcie lessotwieranie pliku bez użycia rąk rpmi wyświetlanie stronicowania jego danych wyjściowych.

Oczywiście, aby grep poprzez te informacje, po prostu grep bezpośrednio wyjście rpm:

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

Lub ogólnie (dzięki OrangeDog)

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

Uwaga: $LESSOPEN Nie ogranicza się tylko do położenia lesspipe.sh- zaczyna się od |a kończy na %stak, więc bezpośrednie wywołanie spowoduje błędy.

Dani_l
źródło
1
Dlaczego nie grep "foo" < <($LESSOPEN bar.rpm)? A może nawet tylko $LESSOPEN bar.rpm | grep "foo".
jpmc26
4

Jeśli chciałbym przejrzeć te metadane mniej pokazujące mi, jak mogę to zrobić?

bardzo prosto; jeśli chcesz na przykład grepować w „wersji”:

less your.rpm | grep "Version"

Zauważ, że less używa rpmpolecenia; więc lepiej pomiń, używając mniej; i używaj rpmpoleceń; lubić:

rpm -qip /path/to/uninstalled/rpm
rpm -qi installed.rpm
Chris Maes
źródło