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

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

有人能解释一下根目录中的 /.rpmdb 文件夹有什么用吗?哪个应用程序创建并使用它?

答案1

我不能确切地说是什么创建了这个目录,但它很可能是使用以下方式安装第三方 Linux 内核驱动程序(如 NVIDIA 或 VirtualBox)的副作用而创建的知识管理系统或由 Ubuntu 未提供的其他不受支持的安装程序脚本创建。此目录很可能是安装过程的副作用,该过程恰好支持基于 rpm 和基于 deb 的发行版。DKMS 恰好就是这样一个安装脚本,在适当的条件下肯定可以创建此目录。可以安全地删除该目录而不会损害您的系统,但稍后安装更新时可能会再次创建该目录。请参阅错误 #1069350以获取跟踪此问题的开放错误报告。

这是简短的回答,现在来详细说明一下。

什么是 .rpmdb?

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

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

为什么 rpm 要在 Ubuntu 上运行?

事实证明,有些项目喜欢创建适用于任何发行版的安装脚本,无论该发行版是基于 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 Software Center 提供了什么环境。

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

我希望这能解释为什么.rpmdbUbuntu 系统上会调用目录,为什么这些目录似乎是自动创建的,以及为什么在合适的条件下可以在根目录中创建一个目录。不用担心,这个目录的存在没有任何恶意,如果它的存在有损美观或安全扫描器,只需将其删除即可。

答案2

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

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


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

相关内容