系统根目录 /.rpmdb 上的未知文件夹

BSi*_*ulj 17 security rpm

有人可以解释根目录中的 /.rpmdb 文件夹的用途吗?哪个应用程序创建并正在使用它?

Mic*_*ler 12

我不能确切地说是什么创建了这个目录,但它很可能是作为使用DKMS安装第三方 Linux 内核驱动程序(如 NVIDIA 或 VirtualBox)的副作用,或者是由其他不受支持的安装程序脚本创建的乌班图。这个目录很可能是作为安装过程的副作用而创建的,该过程恰好支持基于 rpm 和基于 deb 的发行版。DKMS 恰好是这样的安装脚本,并且在合适的条件下绝对可以创建此目录。可以安全地删除该目录而不会损害您的系统,但稍后安装更新时可能会再次创建该目录。有关跟踪此问题的开放错误报告,请参阅错误 #1069350

这是简短的答案,现在有更多细节。

什么是 .rpmdb?

您可能知道,rpm 是一种软件打包格式和一组工具,用于安装软件包和维护已安装软件包及其相互依赖关系的数据库。它被许多发行版使用,但不被 Ubuntu 和其他基于 deb 的发行版使用。然而,不幸的是,对于 Ubuntu 而言,该rpm命令的任何使用都需要存在或创建有效的“rpmdb”数据库。

在基于 rpm 的发行版上,这不是问题,因为根据定义,它们具有系统范围的 rpmdb。在 Ubuntu 系统上,由于不需要系统范围的 rpm 数据库,rpm所以配置为在每个用户的主目录下使用一个数据库,特别是$HOME/.rpmdb. 该数据库在rpm运行时根据需要静默创建。由于它位于每个用户的主目录中,因此共享权限或需要由管理员创建数据库都没有问题。每个用户都只获得自己的私有空 rpm 数据库。

为什么要在 Ubuntu 上运行 rpm?

事实证明,有些项目喜欢创建可在任何发行版上运行的安装脚本,无论该发行版是基于 rpm、基于 deb 还是两者都不是。DKMS 就是这样一个项目,它允许为系统运行的任何 Linux 内核构建第三方驱动程序,并且它被编写为跨发行版工作。在确定其运行于哪个发行版以及存在哪个内核版本的部分逻辑中,它执行rpm查询数据库的命令。正如我之前解释的,.rpmdb如果当前用户的主目录中不存在一个目录,这将默默地创建一个目录。数据库查询应该会失败,因为 Ubuntu 不是基于 rpm 的发行版,而 DKMS 会继续运行。

如果您从 Ubuntu 安装任何其他 Linux 内核驱动程序包,例如 VirtualBox、NVIDIA、ndiswrapper 或 openswan,您可能正在使用 DKMS 为您的内核安装这些驱动程序。这通常在从 Ubuntu 存储库安装驱动程序时自动完成。因此,无论何时安装内核或驱动程序更新,DKMS 都会再次运行以重建所有可用内核版本的驱动程序。已经表明,当这些包被更新时,/root/.rpmdb目录确实出现了,它在 root 的主目录中,因为安装更新需要 root。

我不知道任何其他特定的第三方安装脚本也可以执行rpm命令作为检测分发类型的一种方式,但这当然是可能的。例如,您可能希望从 Initech 安装 LargeProprietaryProgram,为此您install.sh以 root 身份运行脚本。此脚本可能会尝试查询 rpm 数据库以查看您是否正在运行基于 rpm 的发行版,并/root/.rpmdb再次创建。

这解释了为什么您可能会在系统上看到/home/user/.rpmdb/root/.rpmdb显示目录。但是为什么在系统根目录下呢?

为什么要在根目录下创建.rpmdb?

对此最简单的解释是$HOME环境变量在某些运行的进程上下文中以某种方式未设置rpm。为了论证,让我们使用 DKMS,因为我们明确知道它可以运行rpm命令。因为它通常在安装或更新包时运行,所以它在您碰巧使用的任何包管理器的环境中运行。如果sudo apt-get用于安装软件包,它将继承正确的$HOME. 如果您使用 PackageKit,它可能根本没有$HOME变量。我不确定 Synaptic 或 Ubuntu 软件中心提供什么环境。

因此,如果 DKMS 在没有$HOME变量的环境中运行,并且由于 rpm 数据库的定义方式,将创建一个空的 rpm 数据库/.rpmdb而不是/root/.rpmdb. 这已rpm在 14.10 开发版本的 Ubuntu 包中修复,因此/root/.rpmdb即使$HOME未定义它现在也应该创建。

我希望这能解释为什么.rpmdb在 Ubuntu 系统上会调用目录,为什么它们可能看起来是自动创建的,以及为什么可以在一组正确的条件下在根目录中创建一个目录。不用担心,这个目录的存在没有任何恶意,如果它的存在有损美观或安全扫描仪,可以简单地将其删除。


Luc*_*cio -1

RPM(红帽包管理器)是一个包管理系统。它的 RPM 最初由 Erik Troan 和 Marc Ewing 于 1997 年编写,用于Red Hat Linux,但现在用于许多 GNU/Linux 发行版。

在包管理器的幕后工作的是 RPM 数据库 ( RPMDB ),存储在/var/lib/rpm. 它由一个数据库(包)组成,其中包含已安装的 rpm的所有元信息。该数据库用于跟踪用户(使用 RPM)安装软件包时更改和创建的所有文件,从而使用户(通过 RPM)能够撤消更改并稍后删除该软件包。


参考: http: //en.wikipedia.org/wiki/RPM_Package_Manager

  • 这与解释为什么 `/.rpmdb` 会出现在 Ubuntu 系统(不使用 rpm)上有什么关系? (4认同)