rpm少了些什么,如何在没有rpm的情况下获得文本


12

当我执行时less package.rpm,less会向我显示有关程序包的各种元信息。不太精确的操作是-它是否内置了能够提取元信息的代码,还是以第一部分看上去像文本文件的方式构建了rpm?

我认为是前者,因为head在这里不是那么有用。但是要提出一个真正的问题:如果我想grep通过这些元数据少显示给我看,我该如何完成?

Answers:


23

如果浏览less手册页,您会发现less它具有INPUT PREPROCESSOR功能。

echo $LESSOPEN查看此预处理器的位置,并使用less/ vim/ cat查看其内容。

在我的机器上,此预处理器/usr/bin/lesspipe.sh为rpm,其中包括以下内容:

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

实际上,less无需手动将文件打开为rpm,并向您显示其输出的分页。

显然,要通过此信息进行grep,只需直接对rpm的输出进行grep即可:

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

或一般而言(感谢OrangeDog)

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

注意: $LESSOPEN不能简单地保留-的位置lesspipe.sh-它以a开头,以a |结尾,%s因此直接调用它会导致错误。


1
为什么不grep "foo" < <($LESSOPEN bar.rpm)呢?甚至只是$LESSOPEN bar.rpm | grep "foo"
jpmc26 2016年

4

如果我想通过较少显示给我的元数据进行grep操作,该如何完成?

很简单 例如,如果您想在“版本”上使用grep:

less your.rpm | grep "Version"

请注意,较少使用该rpm命令。所以最好少用 并使用rpm命令;喜欢:

rpm -qip /path/to/uninstalled/rpm
rpm -qi installed.rpm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.