如何 yum 列出不在存储库中的已安装软件包

如何 yum 列出不在存储库中的已安装软件包

我正在运行 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 时安装的软件包也被排除。

相关内容