rpm 有什么用处,以及如何在没有 rpm 的情况下获得该文本

Isa*_*aac 12 less grep rpm

当我执行时less package.rpm,less 会向我显示有关包的各种元信息。什么不太准确 - 它是否内置了能够提取元信息的代码,或者是以第一部分看起来像文本文件的方式构建的 rpm?

我会假设前者,因为head在这里不是很有帮助。但要解决真正的问题:如果我想grep通过这个元数据少向我展示,我该如何做到这一点?

Dan*_*i_l 23

如果您浏览less手册页,您会注意到less有一个 INPUT PREPROCESSOR 功能。

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

在我的机器上,这个预处理器/usr/bin/lesspipe.sh包含以下内容:

*.rpm) rpm -qpivl --changelog -- "$1"; handle_exit_status $?
Run Code Online (Sandbox Code Playgroud)

实际上,less将文件打开到rpm,并向您显示其输出的分页。

显然,要查看此信息,只需直接 grep rpm 的输出:

grep "foo" < <(rpm -qpivl --changelog -- bar.rpm)
Run Code Online (Sandbox Code Playgroud)

或者一般情况下(感谢 OrangeDog)

grep "foo" < <(lesspipe.sh bar.rpm)
Run Code Online (Sandbox Code Playgroud)

注意: $LESSOPEN不只是保存位置lesspipe.sh- 它以 a 开头并以 a|结尾,%s因此直接调用它会导致错误。