这些步骤来自运行 CentOS 6.5 的机器。我只是尝试将 RPM 包转换为 CPIO 存档,并惊讶地发现 RPM 中列出了但存档中没有的文件。以下是采取的步骤。
列出 RPM 中的路径:
$ rpm -qlp sssd-1.9.2-82.4.el6_4.x86_64.rpm | sort > rpm.lst
将 RPM 转换为 CPIO 存档:
$ rpm2cpio sssd-1.9.2-82.4.el6_4.x86_64.rpm > sssd-1.9.2-82.4.el6_4.x86_64.cpio
将文件列表保存在存档中。过滤器sed
需要从路径名中删除前导点条目。对于 RPM 列表,这不是必需的。
$ cpio -i -t < sssd-1.9.2-82.4.el6_4.x86_64.cpio | sed -e 's|^.||' | sort > cpio.lst
最后,显示丢失文件的差异:
$ diff -u cpio.lst rpm.lst
--- cpio.lst 2015-07-16 19:54:06.020494348 +0530
+++ rpm.lst 2015-07-16 19:53:38.012494371 +0530
@@ -2,6 +2,7 @@
/etc/rc.d/init.d/sssd
/etc/rwtab.d/sssd
/etc/sssd
+/etc/sssd/sssd.conf
/usr/bin/sss_ssh_authorizedkeys
/usr/bin/sss_ssh_knownhostsproxy
/usr/lib64/ldb/modules/ldb/memberof.so
@@ -102,6 +103,8 @@
/var/lib/sss
/var/lib/sss/db
/var/lib/sss/mc
+/var/lib/sss/mc/group
+/var/lib/sss/mc/passwd
/var/lib/sss/pipes
/var/lib/sss/pipes/private
/var/lib/sss/pubconf
为什么 RPM 中存在文件但 CPIO 存档中缺少文件?我特别感兴趣,/etc/sssd/sssd.conf
因为我想查看一个示例配置文件。我们使用的sssd
软件包比来自CentOS的软件包更旧。我用 CentOS 的软件包重复了上述步骤。结果是一样的。