我的任务是识别安装在几台 Red Hat Enterprise Linux (RHEL) 机器上的新(非操作系统)软件。谁能建议一种有效的方法来做到这一点?我这样做的方式是手动将已安装软件的列表与 Red Hat FTP 站点上相关操作系统的列表进行比较:
ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/
我在使用这种方法时遇到的问题是它很乏味/耗时,而且只列出了源包(例如,我不知道 avahi-glib 是否作为 avahi 包的一部分安装)。如果有人可以提出一种更有效的方法来识别 RHEL 机器上的操作系统未附带的软件,我们将不胜感激!
这是我迄今为止提出的一种更有效的方法(尽管我还没有弄清楚最后一部分,并且可能有更有效的方法)。如果有人可以帮助我完成此方法的最后一步,或者可以分享更好的方法,将不胜感激!
新方法(正在进行中):
将 Red Hat 的 FTP 站点中的软件包列表复制到一个文本文件 (OSPackages.txt) 中。
要解决仅列出源 RPM 的问题,请将http://vault.centos.org中相关相应版本的文件列表复制到文本文件中,并将此数据与 OSPackages.txt 合并。
执行 rpm -qa > list1, yum -y list installed > list2, ls /usr/bin > list3, ls /usr/share > list4, ls /usr/lib > list5。
使用 cat 将所有 listX 文件合并到 InstalledPackages.txt 中。
使用 sort 对唯一条目进行排序,例如: sort -u -k 1 InstalledPackages.txt > SortedInstalledPackages.txt
使用正则表达式 (-I regexp) 在 SortedInstalledPackages.txt 和 OSPackages.txt 之间进行比较,以识别包名称(并消除版本号)。我还需要做一个“单向差异”,例如忽略 OSPackages.txt 中未出现在已安装包文件中的额外操作系统包。
注意:我问了以下问题来帮助我完成这部分,并且相信我现在已经非常接近解决方案: 如何在 Linux 中进行单向差异?
如果 diff (或其他命令)可以执行最后一步,它应该生成一个不在操作系统上的软件包列表。这是我坚持的步骤,希望得到进一步的帮助。我将使用什么命令来执行第 6 步?