重新安装丢失/损坏文件的软件包

jay*_*ica 19 yum fedora rpm dnf

在不干净的关机和丰富多彩的 fsck 之后,一大堆文件丢失了。'rpm -Va' 的输出有几百行长(主要是缺少文件,但也有一些校验和和其他不匹配)。有没有一种简单的方法可以重新安装丢失和/或损坏文件的软件包?

有问题的操作系统是 Fedora 22。

dok*_*000 18

为了参考和完整性起见,一个能够实现最初要求的命令将是这样的(快速组合在一起,但它正在工作)

rpm -qf $(rpm -Va 2>&1 | grep -vE '^$|prelink:' | sed 's|.* /|/|') | sort -u
Run Code Online (Sandbox Code Playgroud)

以下是对各个部分的简短说明:

rpm -Va 2>&1
Run Code Online (Sandbox Code Playgroud)

将对 rpm 数据库中当前安装/列出的所有软件包运行完整的验证。它还会将 stderr 重定向到 stdout,因为在我的盒子上,由于启用了预链接而导致的一些错误被报告为错误,但我们希望它们在 stdout 上。
注意:需要以 root 身份运行才能检查所有文件、权限和所有者/组。

grep -vE '^$|prelink:'
Run Code Online (Sandbox Code Playgroud)

禁止显示显示emtpy线和这样的预链接错误的(这样的错误的示例:
prelink: /tmp/#prelink#.B14JBi: Recorded 10 dependencies, now seeing -1

sed 's|.* /|/|')
Run Code Online (Sandbox Code Playgroud)

将过滤rpm -Va输出以仅显示文件名

rpm -qf $()
Run Code Online (Sandbox Code Playgroud)

将查询所有获取的包含这些包的文件名,并输出包名和版本

| sort -u
Run Code Online (Sandbox Code Playgroud)

将抑制重复的包名称/版本组合。

您将收到一份未通过验证的软件包列表。

rpm -Va可能仍会显示一些不相关的问题,因为它还会检查包之间的依赖关系,这可能需要通过添加 --nodeps.