Linux中已安装软件的版本信息存放在什么地方?

采用dpkg包管理的系统

Debian Wiki有更多细节https://wiki.debian.org/MaintainerScripts

/var/lib/dpkg/status
/var/lib/dpkg/status-old

这两个文件中,存放了系统中所有已安装的包的信息。通过命令dpkg -l 等命令查看的内容就是来源于这个文件。

下面节选了一段我系统中mysql-server的安装包信息

Package: mysql-server	
Status: install ok installed 		
Priority: optional
Section: database
Installed-Size: 107
Maintainer: Ubuntu Developers <[email protected]>
Architecture: all
Source: mysql-5.7
Version: 5.7.27-0ubuntu0.16.04.1
Depends: mysql-server-5.7
Description: MySQL database server (metapackage depending on the latest version)
 This is an empty package that depends on the current "best" version of
 mysql-server (currently mysql-server-5.7), as determined by the MySQL
 maintainers. Install this package if in doubt about which MySQL
 version you need. That will install the version recommended by the
 package maintainers.
 .
 MySQL is a fast, stable and true multi-user, multi-threaded SQL database
 server. SQL (Structured Query Language) is the most popular database query
 language in the world. The main goals of MySQL are speed, robustness and
 ease of use.
Homepage: http://dev.mysql.com/
Original-Maintainer: Debian MySQL Maintainers <[email protected]>

内容详情:

加粗的条目代表其内容出现在dpkg -l 输出中

  • Package: 包名,dpkg -l 输出的第二列
  • Status: 状态,包括期望状态和当前状态两部分
    • 最常见的为(期望安装&已安装)install ok installed,对应dpkg -l输出第一列为ii
    • 还有(期望卸载&仅保留配置)deinstall ok config-files,对应dpkg -l输出第一列为rc
    • 安装配置失败的情况(期望安装&配置失败)install ok half-configured,对应dpkg -l输出第一列为iF
    • 详情参见文章:https://blog.csdn.net/Three_dog/article/details/102497540
  • Priority: 优先级,可选项一般有:
    • required(必须的 )注意这种优先级软件装上卸载不掉。
    • important(重要的)
    • optional(可选的)
    • extra(额外的)
    • standard(标准的)
  • Section: 类别,可选项一般有:
    • database 数据库
    • editors 编辑器
    • libs 库
    • fonts 字体
    • 等等
  • Installed-Size: 安装包大小(一般是安装后的大小,不是deb包的大小)
  • Maintainer: 开发者&维护者
    Architecture: 支持架构,dpkg -l输出第四列
    • all 所有平台
    • amd64
    • x86
    • arm
    • aarch64
    • mips
    • 等等
      Source: mysql-5.7
  • Version: 版本号,不同产品厂家的命名规范都有所不同,dpkg -l输出第三列
  • Depends: 依赖,运行此软件需要依赖的包及版本都记录在这里。如果是依赖多个软件包和库文件,彼此之间采用逗号隔开。
  • Pre-Depends: 依赖,如果不满足直接阻断安装。系统里不会有任何记录。与上面Depends不同,如果Depends不满足,软件安装状态为未配置,文件还是会解压,安装还是会被记录。
  • Description: 软件描述, dpkg -l输出第五列,截取Description后的第一行内容输出。
  • Recommends:推荐的安装的其他软件包和库文件;
  • Breaks: 此项中列出的软件包将会损坏当前软件包。
  • Homepage: 主页
  • Original-Maintainer: 原维护者,一般官方发布在源里可以apt-get安装的软件包,维护者都是系统发行版官方(例如面写的Ubuntu。)原维护者才是软件的开发人员。

内容来源

dpkg -l中的内容,是从/var/lib/dpkg/status中获取,而status文件中每个软件包的内容,是在软件安装过程中写入的。内容由软件包(xxx.deb)的制作者提供。 如果你有自己制作过deb包就会了解,在安装包内的DEMAIN目录下一个名为control的文件,里面写的就是相关内容。

目录下还有一个copyright文件,写的是软件的版权信息。安装后会被写入在系统中的/var/lib/dpkg/info/xxxx.copyright文件中

使用dpkg -r xxx 命令卸载包,会把软件包释放的文件删除并且,把status文件中对应的包信息的状态属性由install ok installed改为deinstall ok config-files。包的记录信息早文件中全部保留
使用dpkg --purge xxx 命令清除包的配置文件,才会把status文件中关于这个包的信息全部清除。

status 和 status-old的区别

系统中应用的是status,而status-oldstatus的一个备份,status每次内容有更新的时候,会先把当前的内容全部拷贝到status-old当中然后再更新。

参考链接:https://blog.csdn.net/zkdemon/article/details/8003734

采用rpm包管理的系统

翻译自红帽官网:https://access.redhat.com/solutions/439953
rpm详解链接:https://www.ibm.com/developerworks/cn/linux/1609_wenjj_rpm/index.html

扫描二维码关注公众号,回复: 11156656 查看本文章

/var/lib/rpm
这是一个RPM数据库,和上面dpkg用文件记录不同,rpm全部采用数据库记录下所有的软件信息。外部无法修改。其中包含有关系统上安装的所有RPM软件包的信息。至少从包装的角度来看,该数据库可用于查询已安装的软件,帮助确定是否安装了最新版本的软件,以及验证系统是否已正确设置。

RPM数据库本身存储在目录中/var/lib/rpm/,并且应包含如下文件:

[threedog@localhost rpm_bak]$ file *
Basenames:    Berkeley DB (Btree, version 9, native byte-order)
Conflictname: Berkeley DB (Btree, version 9, native byte-order)
__db.001:     Applesoft BASIC program data
__db.002:     386 pure executable
__db.003:     386 pure executable not stripped
Dirnames:     Berkeley DB (Btree, version 9, native byte-order)
Group:        Berkeley DB (Btree, version 9, native byte-order)
Installtid:   Berkeley DB (Btree, version 9, native byte-order)
Name:         Berkeley DB (Btree, version 9, native byte-order)
Obsoletename: Berkeley DB (Btree, version 9, native byte-order)
Packages:     Berkeley DB (Hash, version 9, native byte-order)
Providename:  Berkeley DB (Btree, version 9, native byte-order)
Requirename:  Berkeley DB (Btree, version 9, native byte-order)
Sha1header:   Berkeley DB (Btree, version 9, native byte-order)
Sigmd5:       Berkeley DB (Btree, version 9, native byte-order)
Triggername:  Berkeley DB (Btree, version 9, native byte-order)

这些文件组成RPM数据库。该文件__db.001和类似文件是RPM系统使用的锁定文件。其他文件是Berkeley DB格式的数据库。最重要的文件是软件包。Packages文件包含每个程序包的标头标记信息,这些信息由每个程序包的索引号索引。该数字随时间缓慢增长。

其他文件,例如Name,Providename和Group,以加快对特定类型信息的访问。RPM数据库非常重要,备份文件,尤其是在升级,安装或删除软件包之后。

原创文章 39 获赞 33 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Three_dog/article/details/102496580