我正在运行 Oracle Linux/RHEL 并尝试获取其名称/架构不在任何活动存储库中的已安装软件包的列表。当执行yum list installed
这些包时,这些包显示为红色,但是是否有任何 yum 命令只列出这些包?
答案1
这是严格地对于 OL7:
sudo yum list installed | egrep -v "@ol7|@anaconda"
您可以通过以下方式查看所有存储库:
sudo yum list installed | grep -v "Loaded plugins" | awk '{print $3}' | sort -u
答案2
我不确定是否可以轻松回答您的任何“问题”积极的存储库”,但我们可以通过以下方式找到所有未通过存储库安装的软件包:
awk 'NR <=3 { next; } { while (NF < 3)
{ getline more; $0=$0 more; } }
$3 !~ /^@/ { print }' \
<( yum list installed )
如果您对当前未包含的软件包感兴趣已启用存储库,但可能已由处于活动状态或系统不再识别的存储库安装,您可以执行以下操作:
awk 'FNR==NR && FNR > 1 { sub(/^!/,"",$1); repos["@" $1]=1; next; }
FNR <=3 { next; } { while (NF < 3) { getline more; $0=$0 more; } }
!($3 in repos) { print }' \
<( yum repolist enabled ; echo anaconda ) \
<( yum list installed )
对于 awk 新手来说,这FNR==NR
是一个将第一个输入文件/流与其余输入分开的习惯用法。该部分将存储库名称加载到哈希中,但有以下注意事项:
!
包含以 开头的存储库名称,!
排除以 开头的存储库名称。- 在与已安装列表中的最终字段进行比较时,将其
@
添加到名称前面以便更快地查找。
现在,看起来很复杂的中间程序只是重新组合 yum 自动分割的行。只要输入行的列/字段少于 3 个,就将下一行追加到其中。
最后一个程序要么测试第三个字段是否以 @ 开头,要么测试它是否在存储库列表中。
注意:yum repolist enabled ; echo anaconda
将“anaconda”附加到 repolist 中,以便在 os-install 时安装的软件包也被排除。