Linux 平台上的软件包管理



简介: 安装,升级和卸载应用软件是影响用户对操作系统评价的决定性因素之一。对于日渐流行的 GNU/Linux 操作系统,拥有简洁强大的软件包管理机制功不可没。本文从基本的 rpm/dpkg 命令行出发,以 RHEL 和 UBUNTU 为例,介绍典型 Linux 系统中应用软件的管理和使用

RPM/DPKG 两大阵营简介

在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM 软件包的 Linux 发行版本和 DEB 软件包的 Linux 发行版本。软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询。

RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成为很多 Linux 系统 (RHEL) 的既定软件标准。与 RPM 进行竞争的是基于 Debian 操作系统 (UBUNTU) 的 DEB 软件包管理工具- DPKG,全称为 Debian Package,功能方面与 RPM 相似。二者之具体比较不在本文范围之内。

简介: 安装,升级和卸载应用软件是影响用户对操作系统评价的决定性因素之一。对于日渐流行的 GNU/Linux 操作系统,拥有简洁强大的软件包管理机制功不可没。本文从基本的 rpm/dpkg 命令行出发,以 RHEL 和 UBUNTU 为例,介绍典型 Linux 系统中应用软件的管理和使用。


  1. (Reading database ... 151150 files and directories currently installed.) 
     Preparing to replace ibm-lotus-notes 8.5-20081211.1925 
     (using ibm-lotus-notes-higher-version.i586.deb) ... 
     Unpacking replacement ibm-lotus-notes ... 
    
     Setting up ibm-lotus-notes (higher-version) ...

  2. 卸载 Notes

    注意卸载软件使用软件名称,而不是包文件名:

    $ sudo dpkg -P ibm-lotus-notes

软件包依赖性关系

由于开源的多态性,Linux 操作系统中的软件之间的依赖性关系处理一直令用户感到头疼。如果 package_a 依赖于 package_b,那么在一个没有安装 package_b 的系统中,package_a 是不被系统推荐安装的,强制安装很可能会导致软件无法正常工作。基于以上 package_a 和 package_b 的关系,在一个干净的系统中 ( 未安装 package_a 或 package_b),欲安装 package_a,错误通常会表现为:


RHEL 5.2
				
# rpm -ivh package_a.rpm 

 error: Failed dependencies: 
        pacakge_b = version info is needed by package_a


Ubuntu 904
				
$ sudo dpkg -i package_a.deb 

 dpkg: regarding package_a.deb containing package, pre-dependency problm: 
  package_a pre-depends on package_b (version info) 
 dpkg: error processing package_a.deb (--install): 
  pre-dependency problem - not installing package_a 
 Errors were encountered while processing: 
  package_a.deb

查询软件包依赖关系


查询 RPM 包的依赖关系,使用 rpm -qRp:
				
# rpm -qRp package_a.rpm 

 package_b = version_info 
或
 package_b >= version_info 
或
 package_b <= version_info

表明 package_a.rpm 依赖于 version_info 版的 package_b,或者任何高于并包括 version_info 版的 package_b,亦或低于或包括 version_info 版的 package_b 。所以 package_b.rpm 必须在 package_a 之前安装于系统中。


查询 DEB 包的依赖关系,可解读 dpkg --info 结果中的 Pre-Depends 字段:
				$ dpkg --info package_a.deb 

 Pre-depends: package_b (= version_info) 
 Depends: package_b (= version_info) 
或
 Pre-depends: package_b (>= version_info) 
 Depends: package_b (>= version_info) 
或
 Pre-depends: package_b (<= version_info) 
 Depends: package_b (<= version_info)

表明 package_a.deb 依赖于 version_info 版的 package_b 或者任何高于并包括 version_info 版的 package_b 亦或低于或包括 version_info 版的 package_b. 所以 package_b.deb 必须在 package_a 之前安装于系统中。

所以正确的安装方法如下节所示。

安装方法


对于 package_a,正确的安装方法应该是:
				
##RPM 
 # rpm -ivh package_b.rpm 
 # rpm -ivh package_a.rpm 

 ##DEB 
 $ sudo dpkg -i package_b.deb 
 $ sudo dpkg -i package_a.deb

嵌套的依赖关系

如上示例为最理想的依赖关系,实际应用中往往最令用户头疼的是 package_a 依赖于 package_b/c/d/e/f 等多个包 , 而 package_b/c/d/e/f 等包又依赖于 package_b1,b2,b3/c1,c2/d1,d2/e1,e2/f1,f2 等等 ... ... 为保证软件的正常使用,必须找到所有依赖包以及子依赖包并且安装。过多的依赖关系大大降低了 Linux 软件安装的用户友好性。所以针对此类问题,使用了更高级的包管理策略去解决 - Yum/APT 。

更友好的包管理软件 - YUM

YUM

YUM 基于 RPM 包管理工具,能够从指定的源空间(服务器,本地目录等)自动下载目标 RPM 包并且安装,可以自动处理依赖性关系并进行下载、安装,无须繁琐地手动下载、安装每一个需要的依赖包。此外,YUM 的另一个功能是进行系统中所有软件的升级。如上所述,YUM 的 RPM 包来源于源空间,在 RHEL 中由 /etc/yum.repos.d/ 目录中的 .repo 文件配置指定,如 rhel-debuginfo.repo 的内容:


rhel-debuginfo.repo
				
[rhel-debuginfo] 
 name=Red Hat Enterprise Linux 5Client - i386 - Debug 
 baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/i386/Debuginfo/ 
 enabled=0 
 gpgcheck=1 
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


YUM 的系统配置文件位于 /etc/yum.conf,内容如:
				
[main] 
 cachedir=/var/cache/yum 
 keepcache=1 
 debuglevel=2 
 pkgpolicy=newest 
 logfile=/var/log/yum.log 
 distroverpkg=redhat-release 
 tolerant=1 
 exactarch=1 
 obsoletes=1 
 gpgcheck=1 
 plugins=1 
 exclude= firefox gftp

配置文件用来定义用户期望的 yum 行为,比如,gpgcheck 表明安装时不进行 gpg 验证,exclued=firefox gftp 表明进行系统全软件升级时不升级 firefox 和 gftp 。

YUM 常用命令


安装指定软件 :
				
# yum -y install package-name


列出系统中已安装软件
				
# yum list


列出系统中可升级的所有软件
				
# yum check-update


升级系统中可升级的所有软件
				
# yum update


升级指定软件
				
# yum update package-name


在升级过程中接受所有互动问答
				
# yum -y update


卸载指定软件
				
# yum remove package-name

更多有关 YUM 的信息,请查阅 http://fedoraproject.org/wiki/Tools/yum 。

更友好的包管理软件 - APT

APT

APT 的全称为 Advanced Packaging Tools 。与 YUM 对应,它最早被设计成 DPKG 的前端软件,现在通过 apt-rpm 也支持 rpm 管理。而本节本节将介绍 APT 作为 DPKG 前端的使用。 APT 的主要包管理工具为 APT-GET,通过此工具可满足和上述 YUM 相似的功能要求。


APT 的软件源定义来自 /etc/apt/sources.list 文件:
				
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to 
 # newer versions of the distribution. 

 deb http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted 
 deb-src http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted

注意每次手动修改上述文件后,需要使用 sudo apt-get update 来更新系统的源使新的源数据被当前系统识别。

UBUNTU 中 APT 的配置文件位于 /etc/apt/apt.conf.d,其中的多个配置文件依功能分类。

APT 常用命令


更新源索引
				
$ sudo apt-get update


安装指定软件
				
$ sudo apt-get install package-name


下载指定软件的源文件
				
$ sudo apt-get source package-name


将系统中所有软件升级到最新版本
				
$ sudo apt-get upgrade


将操作系统连同所有软件升级到最新版本
				
$ sudo apt-get dist-upgrade


卸载指定软件
				
$ sudo apt-get remove package-name

更多有关 APT 的信息,请查阅 http://www.debian.org/doc/manuals/apt-howto/index.en.html 。

RPM 与 DEB 的兼容 - Alien

Alien 工具可以将 RPM 软件包转换成 DEB 软件包,或把 DEB 软件包转换成 RPM 软件包,以此适应兼容性的需要。注意首先请在系统中安装 alien 。


在 UBUNTU 中使用 alien 将 rpm 转换为 deb 并安装 :
				
$ sudo alien -d package.rpm 
 $ sudo dpkg -i package.deb


在 RHEL 中使用 alien 将 deb 转换为 rpm 并安装 :
				
# alien -r package.deb 
 # rpm -ivh package.rpm

更多 alien 相关信息请查阅 http://linux.die.net/man/1/alien

总结

本文以 RHEL 5.2 和 Ubuntu 904 为例,基于命令行操作,介绍了 Linux 系统中两大常用软件包管理工具- RPM 与 DPKG 。首先从最底端的 rpm/dpkg 命令操作开始列举了它们的基本使用方法,随后指出了软件的依赖关系以及由此带来的问题,并对此问题的解决方案,也是最流行的 YUM 与 APT 前端软件管理系统进行了操作介绍。最后本文简要说明了当前 RPM/DEB 的兼容性问题的常规解决方法。

常见问题列表

可以手动强制不进行 RPM/DEB 的依赖性关系检查吗?

  • RPM

    可以。使用 --nodeps 辅助参数,则安装过程将不理会依赖性关系限制,强制安装目标包,如:

    # rpm -i --nodeps package_a.rpm
  • DEB

    可以。使用— force-depends 辅助参数,如:

    $ sudo dpkg -i --force-depends package_a.deb

RPM 中的 --force 是干什么用的?

RPM 中的默认安装规则是不允许同一个包多次安装的,也不允许降级安装。使用 --force 辅助参数将不考虑以上因素,强制安装 RPM 包。但是,--force 无法强制安装一个不满足系统依赖性关系的包 ( 此时需要用到 --nodeps 参数 ) 。使用方法如:

# rpm -i --force package_a.rpm

RPM/DPKG 支持远程安装吗?

  • RPM

    是。 RPM 支持 HTTP 和 FTP 协议,如:

    # rpm -Uvh ftp://user:pass@ftpserver/package.rpm
  • DPKG

    最新的基于 DEB 包的系统中,远程安装通常被更先进的 APT 代替。

可以从 RPM/DPKG 中抽取个别文件吗?

RPM/DPKG 提供包安装成功的验证机制吗?

  • RPM

    是。可以使用 -V 参数进行验证。

  • DPKG

    Debian 系统通常使用 debsums 工具参数进行验证。

RPM/DPKG 提供包安全签名吗?

  • RPM

    是。可以使用 --import 导入与软件同时发布的 GPG KEY, 接着使用 -K 命令来验证包的安全性,如:

    # rpm --import pub_ibm_lotus_notes.gpg # rpm -K ibm_lotus_notes-8.5.i586.rpm 返回信息 : ibm_lotus_notes-8.5.i586.rpm: (sha1) dsa sha1 md5 gpg OK
  • DPKG

    DPKG 不提供原生的 Key 验证机制。可以使用 debsigs 和 debsigs-verify,详情请见:http://man.ddvip.com/os/debiansecuring-howto/ch7.zh-cn.html

如果 RPM 的底层数据库损坏,RPM 还能使用吗?

  • RPM

    如果底层数据库损坏,RPM 将无法正常使用。此时最常用的解决方法是重构数据库:

    # rm -f /var/lib/rpm/__* ; rpm -vv --rebuilddb
  • RPM

    DPKG 本身不提供底层数据库恢复机制。它的数据库以文件形式保存在 /var/lib/dpkg 目录中。及时地备份这个目录是最好的预防数据库损坏措施。

可以查询系统中已经安装的某个文件属于哪个 RPM 包吗?

  • RPM

    可以。使用 -qf 参数 , 如在安装了 Notes8.5 的系统中:

    # rpm -qf /opt/ibm/lotus/notes/notes 返回信息 : Ibm_lotus_notes-8.5-20081211.1920
  • DPKG

    可以。使用— search 参数 , 如在安装了 Notes8.5 的系统中:

    $ dpkg --search /opt/ibm/lotus/notes/notes 返回信息 : ibm-lotus-notes: /opt/ibm/lotus/notes/notes

可以查询 RPM 包的安装时间吗?

  • RPM

    可以。可使用 --last 查询。如:

    rpm -qa --last 返回信息 : 系统中所有软件的安装时间。
  • DPKG

    DPKG 不提供直接的查询参数,但是可以用过查询 dpkg 的日志文件实现这个功能。如:

    cat /var/log/dpkg.log | grep "\ install\ "

简介:  安装,升级和卸载应用软件是影响用户对操作系统评价的决定性因素之一。对于日渐流行的 GNU/Linux 操作系统,拥有简洁强大的软件包管理机制功不可没。本文从基本的 rpm/dpkg 命令行出发,以 RHEL 和 UBUNTU 为例,介绍典型 Linux 系统中应用软件的管理和使用。
  1. (Reading database ... 151150 files and directories currently installed.) 
     Preparing to replace ibm-lotus-notes 8.5-20081211.1925 
     (using ibm-lotus-notes-higher-version.i586.deb) ... 
     Unpacking replacement ibm-lotus-notes ... 
    
     Setting up ibm-lotus-notes (higher-version) ...

  2. 卸载 Notes

    注意卸载软件使用软件名称,而不是包文件名:

    $ sudo dpkg -P ibm-lotus-notes

软件包依赖性关系

由于开源的多态性,Linux 操作系统中的软件之间的依赖性关系处理一直令用户感到头疼。如果 package_a 依赖于 package_b,那么在一个没有安装 package_b 的系统中,package_a 是不被系统推荐安装的,强制安装很可能会导致软件无法正常工作。基于以上 package_a 和 package_b 的关系,在一个干净的系统中 ( 未安装 package_a 或 package_b),欲安装 package_a,错误通常会表现为:


RHEL 5.2
				
# rpm -ivh package_a.rpm 

 error: Failed dependencies: 
        pacakge_b = version info is needed by package_a


Ubuntu 904
				
$ sudo dpkg -i package_a.deb 

 dpkg: regarding package_a.deb containing package, pre-dependency problm: 
  package_a pre-depends on package_b (version info) 
 dpkg: error processing package_a.deb (--install): 
  pre-dependency problem - not installing package_a 
 Errors were encountered while processing: 
  package_a.deb

查询软件包依赖关系


查询 RPM 包的依赖关系,使用 rpm -qRp:
				
# rpm -qRp package_a.rpm 

 package_b = version_info 
或
 package_b >= version_info 
或
 package_b <= version_info

表明 package_a.rpm 依赖于 version_info 版的 package_b,或者任何高于并包括 version_info 版的 package_b,亦或低于或包括 version_info 版的 package_b 。所以 package_b.rpm 必须在 package_a 之前安装于系统中。


查询 DEB 包的依赖关系,可解读 dpkg --info 结果中的 Pre-Depends 字段:
				$ dpkg --info package_a.deb 

 Pre-depends: package_b (= version_info) 
 Depends: package_b (= version_info) 
或
 Pre-depends: package_b (>= version_info) 
 Depends: package_b (>= version_info) 
或
 Pre-depends: package_b (<= version_info) 
 Depends: package_b (<= version_info)

表明 package_a.deb 依赖于 version_info 版的 package_b 或者任何高于并包括 version_info 版的 package_b 亦或低于或包括 version_info 版的 package_b. 所以 package_b.deb 必须在 package_a 之前安装于系统中。

所以正确的安装方法如下节所示。

安装方法


对于 package_a,正确的安装方法应该是:
				
##RPM 
 # rpm -ivh package_b.rpm 
 # rpm -ivh package_a.rpm 

 ##DEB 
 $ sudo dpkg -i package_b.deb 
 $ sudo dpkg -i package_a.deb

嵌套的依赖关系

如上示例为最理想的依赖关系,实际应用中往往最令用户头疼的是 package_a 依赖于 package_b/c/d/e/f 等多个包 , 而 package_b/c/d/e/f 等包又依赖于 package_b1,b2,b3/c1,c2/d1,d2/e1,e2/f1,f2 等等 ... ... 为保证软件的正常使用,必须找到所有依赖包以及子依赖包并且安装。过多的依赖关系大大降低了 Linux 软件安装的用户友好性。所以针对此类问题,使用了更高级的包管理策略去解决 - Yum/APT 。

更友好的包管理软件 - YUM

YUM

YUM 基于 RPM 包管理工具,能够从指定的源空间(服务器,本地目录等)自动下载目标 RPM 包并且安装,可以自动处理依赖性关系并进行下载、安装,无须繁琐地手动下载、安装每一个需要的依赖包。此外,YUM 的另一个功能是进行系统中所有软件的升级。如上所述,YUM 的 RPM 包来源于源空间,在 RHEL 中由 /etc/yum.repos.d/ 目录中的 .repo 文件配置指定,如 rhel-debuginfo.repo 的内容:


rhel-debuginfo.repo
				
[rhel-debuginfo] 
 name=Red Hat Enterprise Linux 5Client - i386 - Debug 
 baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/i386/Debuginfo/ 
 enabled=0 
 gpgcheck=1 
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


YUM 的系统配置文件位于 /etc/yum.conf,内容如:
				
[main] 
 cachedir=/var/cache/yum 
 keepcache=1 
 debuglevel=2 
 pkgpolicy=newest 
 logfile=/var/log/yum.log 
 distroverpkg=redhat-release 
 tolerant=1 
 exactarch=1 
 obsoletes=1 
 gpgcheck=1 
 plugins=1 
 exclude= firefox gftp

配置文件用来定义用户期望的 yum 行为,比如,gpgcheck 表明安装时不进行 gpg 验证,exclued=firefox gftp 表明进行系统全软件升级时不升级 firefox 和 gftp 。

YUM 常用命令


安装指定软件 :
				
# yum -y install package-name


列出系统中已安装软件
				
# yum list


列出系统中可升级的所有软件
				
# yum check-update


升级系统中可升级的所有软件
				
# yum update


升级指定软件
				
# yum update package-name


在升级过程中接受所有互动问答
				
# yum -y update


卸载指定软件
				
# yum remove package-name

更多有关 YUM 的信息,请查阅 http://fedoraproject.org/wiki/Tools/yum 。

更友好的包管理软件 - APT

APT

APT 的全称为 Advanced Packaging Tools 。与 YUM 对应,它最早被设计成 DPKG 的前端软件,现在通过 apt-rpm 也支持 rpm 管理。而本节本节将介绍 APT 作为 DPKG 前端的使用。 APT 的主要包管理工具为 APT-GET,通过此工具可满足和上述 YUM 相似的功能要求。


APT 的软件源定义来自 /etc/apt/sources.list 文件:
				
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to 
 # newer versions of the distribution. 

 deb http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted 
 deb-src http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted

注意每次手动修改上述文件后,需要使用 sudo apt-get update 来更新系统的源使新的源数据被当前系统识别。

UBUNTU 中 APT 的配置文件位于 /etc/apt/apt.conf.d,其中的多个配置文件依功能分类。

APT 常用命令


更新源索引
				
$ sudo apt-get update


安装指定软件
				
$ sudo apt-get install package-name


下载指定软件的源文件
				
$ sudo apt-get source package-name


将系统中所有软件升级到最新版本
				
$ sudo apt-get upgrade


将操作系统连同所有软件升级到最新版本
				
$ sudo apt-get dist-upgrade


卸载指定软件
				
$ sudo apt-get remove package-name

更多有关 APT 的信息,请查阅 http://www.debian.org/doc/manuals/apt-howto/index.en.html 。

RPM 与 DEB 的兼容 - Alien

Alien 工具可以将 RPM 软件包转换成 DEB 软件包,或把 DEB 软件包转换成 RPM 软件包,以此适应兼容性的需要。注意首先请在系统中安装 alien 。


在 UBUNTU 中使用 alien 将 rpm 转换为 deb 并安装 :
				
$ sudo alien -d package.rpm 
 $ sudo dpkg -i package.deb


在 RHEL 中使用 alien 将 deb 转换为 rpm 并安装 :
				
# alien -r package.deb 
 # rpm -ivh package.rpm

更多 alien 相关信息请查阅 http://linux.die.net/man/1/alien

总结

本文以 RHEL 5.2 和 Ubuntu 904 为例,基于命令行操作,介绍了 Linux 系统中两大常用软件包管理工具- RPM 与 DPKG 。首先从最底端的 rpm/dpkg 命令操作开始列举了它们的基本使用方法,随后指出了软件的依赖关系以及由此带来的问题,并对此问题的解决方案,也是最流行的 YUM 与 APT 前端软件管理系统进行了操作介绍。最后本文简要说明了当前 RPM/DEB 的兼容性问题的常规解决方法。

常见问题列表

可以手动强制不进行 RPM/DEB 的依赖性关系检查吗?

  • RPM

    可以。使用 --nodeps 辅助参数,则安装过程将不理会依赖性关系限制,强制安装目标包,如:

    # rpm -i --nodeps package_a.rpm
  • DEB

    可以。使用— force-depends 辅助参数,如:

    $ sudo dpkg -i --force-depends package_a.deb

RPM 中的 --force 是干什么用的?

RPM 中的默认安装规则是不允许同一个包多次安装的,也不允许降级安装。使用 --force 辅助参数将不考虑以上因素,强制安装 RPM 包。但是,--force 无法强制安装一个不满足系统依赖性关系的包 ( 此时需要用到 --nodeps 参数 ) 。使用方法如:

# rpm -i --force package_a.rpm

RPM/DPKG 支持远程安装吗?

  • RPM

    是。 RPM 支持 HTTP 和 FTP 协议,如:

    # rpm -Uvh ftp://user:pass@ftpserver/package.rpm
  • DPKG

    最新的基于 DEB 包的系统中,远程安装通常被更先进的 APT 代替。

可以从 RPM/DPKG 中抽取个别文件吗?

RPM/DPKG 提供包安装成功的验证机制吗?

  • RPM

    是。可以使用 -V 参数进行验证。

  • DPKG

    Debian 系统通常使用 debsums 工具参数进行验证。

RPM/DPKG 提供包安全签名吗?

  • RPM

    是。可以使用 --import 导入与软件同时发布的 GPG KEY, 接着使用 -K 命令来验证包的安全性,如:

    # rpm --import pub_ibm_lotus_notes.gpg # rpm -K ibm_lotus_notes-8.5.i586.rpm 返回信息 : ibm_lotus_notes-8.5.i586.rpm: (sha1) dsa sha1 md5 gpg OK
  • DPKG

    DPKG 不提供原生的 Key 验证机制。可以使用 debsigs 和 debsigs-verify,详情请见:http://man.ddvip.com/os/debiansecuring-howto/ch7.zh-cn.html

如果 RPM 的底层数据库损坏,RPM 还能使用吗?

  • RPM

    如果底层数据库损坏,RPM 将无法正常使用。此时最常用的解决方法是重构数据库:

    # rm -f /var/lib/rpm/__* ; rpm -vv --rebuilddb
  • RPM

    DPKG 本身不提供底层数据库恢复机制。它的数据库以文件形式保存在 /var/lib/dpkg 目录中。及时地备份这个目录是最好的预防数据库损坏措施。

可以查询系统中已经安装的某个文件属于哪个 RPM 包吗?

  • RPM

    可以。使用 -qf 参数 , 如在安装了 Notes8.5 的系统中:

    # rpm -qf /opt/ibm/lotus/notes/notes 返回信息 : Ibm_lotus_notes-8.5-20081211.1920
  • DPKG

    可以。使用— search 参数 , 如在安装了 Notes8.5 的系统中:

    $ dpkg --search /opt/ibm/lotus/notes/notes 返回信息 : ibm-lotus-notes: /opt/ibm/lotus/notes/notes

可以查询 RPM 包的安装时间吗?

  • RPM

    可以。可使用 --last 查询。如:

    rpm -qa --last 返回信息 : 系统中所有软件的安装时间。
  • DPKG

    DPKG 不提供直接的查询参数,但是可以用过查询 dpkg 的日志文件实现这个功能。如:

    cat /var/log/dpkg.log | grep "\ install\ "
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值