当我执行时less package.rpm
, less 向我显示有关包的各种元信息。不太确切的做法是什么 - 它是否有内置代码能够提取元信息,或者 rpm 的结构方式是否使第一部分看起来像文本文件?
我认为是前者,因为head
在这里没有太大帮助。但要到达真实的问题:如果我想grep
通过这个元数据较少地向我展示,我该如何实现这一点?
答案1
如果您浏览less
手册页,您会注意到less
有一个输入预处理器功能。
echo $LESSOPEN
查看此预处理器的位置,并使用//less
查看其内容。vim
cat
在我的机器上,这个预处理器/usr/bin/lesspipe.sh
包含以下 rpm 内容:
*.rpm) rpm -qpivl --changelog -- "$1"; handle_exit_status $?
实际上,less
无需打开文件rpm
,并显示其输出的分页。
显然,要 grep 这些信息,只需直接 grep rpm 的输出即可:
grep "foo" < <(rpm -qpivl --changelog -- bar.rpm)
或者一般情况(感谢 OrangeDog)
grep "foo" < <(lesspipe.sh bar.rpm)
笔记: $LESSOPEN
不只是保存位置lesspipe.sh
- 它以 a 开头|
并以 a 结尾%s
,因此直接调用它会导致错误。
答案2
如果我想 grep 浏览这些元数据而不是向我显示,我该如何实现这一点?
非常简单;例如,如果您想 grep “版本”:
less your.rpm | grep "Version"
注意 less 使用的是rpm
命令;所以最好跳过少用;并使用rpm
命令;喜欢:
rpm -qip /path/to/uninstalled/rpm
rpm -qi installed.rpm