在Centos计算机

时间:2015-09-11 12:57:47

标签: linux centos rpm

我正在尝试识别Centos服务器上安装的软件,直到现在我才出现了#39;以下两个基本解决方案

  1. 解析可执行文件和库的文件系统
  2. 运行rpm -qa
  3. 之类的内容

    第一个是耗费时间,而第二个不适用于我的所有情况。例如,我想搜索'对于包,即使服务器没有运行,我只能将其文件系统作为远程卷,快照或图像访问。

    我的想法是尝试解析rpm -qa从中读取数据的相同数据库/文件。

    运行strace -o /tmp/rpm-strace.out rpm -qa后,我发现(不确定)/var/lib/rpm/Packages/var/lib/rpm/Names是该数据库'的一些可能位置。但我无法解析这两个文件中的任何一个。

    有谁知道如何解析这些文件?有没有其他方法可以实现我的目标?

    注意:根据this 'Unix & Linux'问题描述的整个想法在Ubuntu下是可行的。

    免责声明:此问题可能更适合于serverfault网站。

2 个答案:

答案 0 :(得分:2)

您确实需要使用rpm来解析rpm数据库。如果您有权访问文件系统,则只需使用chroot在相应的根上下文中运行rpm

chroot /my/server/filesystem rpm -qa

这些文件是各种各样的BerkeleyDB数据库文件。假设您的运行时环境具有相同版本的BerkeleyDB,您可以使用Python的bsddb模块之类的内容来阅读它们:

>>> import bsddb
>>> name = bsddb.btopen('/var/lib/rpm/Name')
>>> for pkg in name.keys():
...   print pkg
...
GConf2
GeoIP
GeoIP-GeoLite-data
GeoIP-GeoLite-data-extra
GitPython
GraphicsMagick
[...]

但这是一个可怕的想法,你不应该这样做,因为谁知道Name数据库是否具有您正在寻找的内容?也许它包含以某种方式标记为已删除的已删除包,因此rpm -qa会忽略它们。您可能需要查看rpm源以确定存储的确切方式。

答案 1 :(得分:1)

my(fedora)rpm命令接受--dbpath选项以指定其他选项 目录与数据库。还有一个rpm-python包来从python中操作数据库。