有什么区别?
行数不同的主要原因是,yum
格式化产生的输出,以便每个字段垂直排列(与软件包名称和/或版本号的长度无关)。它通过使用两行列出此类软件包并在第二行中填充空格字符来正确地排列字段来完成此操作。以下输出(来自CentOS 6框)显示了两行用于列出device-mapper-persistent-data.x86_64
软件包:
device-mapper-libs.x86_64 1.02.95-3.el6_7.4 @clearos-verified-updates
device-mapper-persistent-data.x86_64
0.3.2-1.el6 @clearos
dhclient.x86_64 12:4.1.1-49.P1.v6 @clearos-verified-updates
但是,这不是唯一的原因,可以通过在比较两个命令之前对它们的输出进行按摩来看出:
对于rpm
命令的输出:
对其进行排序,以使以大写字母开头的软件包出现在小写字母之前:
rpm -qa | LC_ALL=C sort
使用sed
命令删除软件包版本号:
rpm -qa | LC_ALL=C sort r | sed 's/-[^-]*-[^-]*$//' >| installed.rpm
对于yum
命令的输出:
删除前两个标题行(Loaded plugins
和Installed Packages
):
Loaded plugins: etckeeper, fastestmirror
Installed Packages
我们可以sed
为此使用:
yum list installed | sed '1,2d;'
我们还可以使用sed
来删除所有与软件包清单相同的行(这些行以许多空格开头,以便所有软件包版本都对齐)。
yum list installed | sed '1,2d;/^ /d;s/\..*//' >| installed.yum
现在,我们可以使用diff
命令比较两个文件的输出。这是CentOS 6框的结果:
# diff installed.{rpm,yum}
239,243d238
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
结论
这表明其中rpm -qa
还包括公钥的软件包列表,这些公共密钥在yum
命令忽略这些软件包时可用来对软件包进行签名。
diff
编辑过输出(可能在排序后)?