有人能解释一下根目录中的 /.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
我希望这能解释为什么.rpmdb
Ubuntu 系统上会调用目录,为什么这些目录似乎是自动创建的,以及为什么在合适的条件下可以在根目录中创建一个目录。不用担心,这个目录的存在没有任何恶意,如果它的存在有损美观或安全扫描器,只需将其删除即可。
答案2
RPM(Red Hat 软件包管理器)是一个软件包管理系统。RPM 最初由 Erik Troan 和 Marc Ewing 于 1997 年编写,用于红帽Linux,但现在在许多 GNU/Linux 发行版中使用。
软件包管理器的幕后工作是 RPM 数据库(远程管理数据库) 存储在 中/var/lib/rpm
。它由一个数据库 (Packages) 组成,其中包含安装的 rpm. 数据库用于跟踪用户(使用 RPM)更改和创建的所有文件安装包,从而使用户(通过 RPM)能够稍后撤消更改并删除该软件包。