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

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

我无法明确说明创建此目录的内容,但很可能是因为使用DKMS安装第三方Linux内核驱动程序(如NVIDIA或VirtualBox)或其他一些不支持的安装程序脚本的副作用。 Ubuntu Linux系统。 此目录很可能是作为安装过程的副作用而创建的,该过程恰好支持基于rpm和基于deb的分发。 DKMS恰好是这样的安装脚本,并且绝对可以在适当的条件下创建此目录。 可以安全地删除该目录而不会损害您的系统,但是稍后安装更新时可能会再次创建该目录。 有关跟踪此问题的错误报告,请参阅错误#1069350 。

这是简短的答案,现在更详细一些。

什么是.rpmdb?

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

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

为什么在Ubuntu上运行rpm?

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

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

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

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

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

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

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

我希望这可以解释为什么在Ubuntu系统上存在名为.rpmdb目录,为什么它们可能看似自动创建,以及为什么可以在正确的条件下在根目录中创建一个目录。 没有什么可担心的,这个目录的存在没有任何恶意,只要它的存在对美学或安全扫描仪不利,它就可以被删除。

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

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


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