查找 RPM 包管理器未安装的文件

ees*_*ada 11 yum fedora rpm dnf

有没有办法找出给定系统上通过 RPM 安装的所有文件?我知道我可以使用类似脚本循环遍历文件系统中的所有文件的东西自己蛮力执行此操作,但是我想知道是否有一些标准方法可以针对基于 RPM 的系统(特别是 Fedora,我在家)。由于这是 Fedora,因此可以使用或解决此问题。rpmquery -fyumdnf

如果没有标准的方法来做到这一点,有没有人知道一些预先存在的脚本来做到这一点?如果我不需要,我不想重新发明轮子。

PS还有另一个与此类似的问题,但它是关于 Gentoo 和 Portage,因此并不完全相关。

小智 7

根据https://superuser.com/questions/555918/how-do-i-list-all-the-files-not-owned-by-any-package-in-a-rpm-based-system,以下命令是您需要的可靠基线:

comm -13 <(rpm -qla | sort) <(find / -type f | sort)

通过将 find 命令过滤到感兴趣的目录(指定目录列表而不是/(例如/{usr,bin})或排除 、 、 和 等文件夹)/proc/dev进一步/home自定义/tmp


小智 7

聚会有点晚了,但希望有人会发现这很有用:

find /usr/ -exec /bin/sh -c "rpm -qf {} &> /dev/null || echo {}" \;
Run Code Online (Sandbox Code Playgroud)

此命令在文件系统上爬行,并rpm -qf在其上运行。rpm -qf打印文件的相应包,幸运的是,如果找到 1,则返回值为 0,否则返回 1。

如果你很勇敢,你可以将输出绑定到| xargs rm -f,但我个人不会那么勇敢。事实证明,/usr 中有很多东西实际上并不属于任何东西。