RPM Database 实战详解

RPM 是 RPM Package Manager 的简写,是发源于 Red-hat 系统的软件管理工具,所以最初的名字叫做 Red-hat Packager Manager。目前,RPM 已发展成为业界认可的 Linux 系统软件管理工具,适用于各种基于 Linux 内核的系统,如 SUSE、Fedora、Power 等。RPM 制作灵活且方便使用,能够有效地管理软件包的安装、卸载和升级。

RPM 自身维护了一个数据库(RPM Database),用于记录所有通过 RPM 安装的软件包及其文件信息。RPM Database 提供多种形式的查询功能,同时也提供软件包和相关文件的验证功能。下面的章节,我们结合一些实际的例子来重点介绍 RPM Database 的查询功能、验证功能以及 RPM Database 的备份与恢复。

RPM 包组件查询

RPM Database 记录了通过 RPM 安装的软件包的所有信息,我们可以使用 rpm 命令对其进行查询。 可查询的内容包括:软件包的名称、版本、描述信息、配置文件、文档文件、安装卸载前后运行的脚本和软件包的修改历史等。 下面,我们通过常见的组件查询例子来详细说明。

1. 列出全部已安装的 RPM 包

命令格式:rpm -qa

清单 1. 列出系统中已安装的全部 RPM 包

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[[email protected] ~]# rpm -qa

libchamplain-gtk-0.12.4-4.el7.x86_64

python-heatclient-0.4.0-1.ibm.el7.noarch

perl-Filter-1.49-3.el7.x86_64

pinentry-0.8.1-14.el7.x86_64

iso-codes-3.46-2.el7.noarch

zip-3.0-10.el7.x86_64

p11-kit-0.20.7-3.el7.x86_64

dbus-1.6.12-11.el7.x86_64

python-itsdangerous-0.22-2.ibm.el7.noarch

libXvMC-1.0.8-2.1.el7.x86_64

python-requests-2.6.0-1.el7_1.noarch

compat-openldap-2.3.43-5.el7.x86_64

# The following lines are omitted

在实际的应用中,该命令常常结合通配符或管道命令,实现一些特定的查找功能。比如:

清单 2. 结合通配符,查询以 mysql 开头的 rpm 包

1

2

3

4

5

[[email protected] ~]# rpm -qa "mysql*"

mysql-server-5.1.73-5.el6_6.x86_64

mysql-5.1.73-5.el6_6.x86_64

mysql-devel-5.1.73-5.el6_6.x86_64

mysql-libs-5.1.73-5.el6_6.x86_64

清单 3. 结合管道命令,查询含有 openstack-nova 的 rpm 包

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[[email protected] ~]# rpm -qa |grep openstack-nova

openstack-nova-scheduler-2015.1.1.1-201509142203.ibm.el7.140.noarch

openstack-nova-network-2015.1.1.1-201509142203.ibm.el7.140.noarch

openstack-nova-conductor-2015.1.1.1-201509142203.ibm.el7.140.noarch

openstack-nova-2015.1.1.1-201509142203.ibm.el7.140.noarch

openstack-nova-api-2015.1.1.1-201509142203.ibm.el7.140.noarch

openstack-nova-novncproxy-2015.1.1.1-201509142203.ibm.el7.140.noarch

openstack-nova-objectstore-2015.1.1.1-201509142203.ibm.el7.140.noarch

openstack-nova-compute-2015.1.1.1-201509142203.ibm.el7.140.noarch

openstack-nova-console-2015.1.1.1-201509142203.ibm.el7.140.noarch

openstack-nova-cells-2015.1.1.1-201509142203.ibm.el7.140.noarch

openstack-nova-compute-prereqs-2013.1-201503302013.ibm.2.x86_64

openstack-nova-cert-2015.1.1.1-201509142203.ibm.el7.140.noarch

openstack-nova-common-2015.1.1.1-201509142203.ibm.el7.140.noarch

清单 4. 结合管道命令,查询系统中近期安装的 rpm 包

1

2

3

4

5

6

7

8

9

10

11

[[email protected] ~]# rpm -qa --last | head

chefdk-0.6.2-1.el6.x86_64                     Wed 09 Sep 2015 10:51:29 PM EDT

docker-engine-1.7.1-1.el6.x86_64              Fri 24 Jul 2015 09:39:25 PM EDT

mysql-devel-5.1.73-5.el6_6.x86_64             Wed 08 Jul 2015 02:51:59 AM EDT

mysql-server-5.1.73-5.el6_6.x86_64            Wed 08 Jul 2015 02:51:58 AM EDT

perl-DBD-MySQL-4.013-3.el6.x86_64             Wed 08 Jul 2015 02:51:56 AM EDT

mysql-5.1.73-5.el6_6.x86_64                   Wed 08 Jul 2015 02:51:56 AM EDT

mysql-libs-5.1.73-5.el6_6.x86_64              Wed 08 Jul 2015 02:51:54 AM EDT

jenkins-1.613-1.1.noarch                      Tue 12 May 2015 04:23:18 AM EDT

gpg-pubkey-d50582e6-4a3feef6                  Tue 12 May 2015 03:23:00 AM EDT

scap-security-guide-0.1.18-3.el6.noarch       Wed 29 Apr 2015 01:26:32 AM EDT

2. 查询特定 RPM 包是否已安装

命令格式:rpm -q package_name

如果是已安装的包,则返回详细包名;否则,返回此包未安装的提示。比如:

清单 5. 查询某 RPM 包是否已安装

1

2

3

4

5

[[email protected] ~]# rpm -q mysql-server

mysql-server-5.1.73-5.el6_6.x86_64

[[email protected] ~]# rpm -q docker-engine

package docker-engine is not installed

注意:实际操作中,请确认 package_name 拼写正确!查询时输错包名,会返回此包未安装的提示信息,常常给系统管理员带来误导。比如:

清单 6. 查询拼写错误的包名,返回此包未安装

1

2

[[email protected] ~]# rpm -q myaql-server

package myaql-server is not installed

提示:如果不能确定包名,建议使用清单 3. 中 rpm -qa | grep name的方法,进行尝试查找得到确切的包名。

3. 查询特定 RPM 包的基本信息

命令格式:rpm -qi package_name

这个命令查询到的基本信息包括:包名、版本号、发行号、组群、文件大小、描述等信息。比如:

清单 7. 查询已安装 RPM 包的基本信息

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

[[email protected] ~]# rpm -qi bash

Name        : bash                       

 Relocations: (not relocatable)

Version     : 4.1.2                          

  Vendor: Red Hat, Inc.

Release     : 29.el6                     

  Build Date: Fri 26 Sep 2014 06:32:15 AM EDT

Install Date: Sun 21 Dec 2014 08:52:32 PM EST   

  Build Host: x86-026.build.eng.bos.redhat.com

Group       : System Environment/Shells   

 Source RPM: bash-4.1.2-29.el6.src.rpm

Size        : 3140846                     

    License: GPLv3+

Signature   : RSA/8, Fri 26 Sep 2014 07:02:48 AM EDT, Key ID

199e2f91fd431d51

Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>

URL         : http://www.gnu.org/software/bash

Summary     : The GNU Bourne Again shell

Description :

The GNU Bourne Again shell (Bash) is a shell or command language

interpreter that is compatible with the Bourne shell (sh). Bash

incorporates useful features from the Korn shell (ksh) and the C shell

(csh). Most sh scripts can be run by bash without modification.

4. 查询特定 RPM 包的配置文件

命令格式:rpm -qc package_name

当系统管理员要更改软件的配置信息,或者查看配置项来定位程序 bug 时,这个命令就派上用场了。比如,查询 openstack nova 的配置文件:

清单 8. 查询已安装 RPM 包的配置文件

1

2

3

4

5

6

7

8

9

10

11

[[email protected] ~]

# rpm -qc openstack-nova-common

/etc/logrotate.d/openstack-nova

/etc/nova/api-paste.ini

/etc/nova/logging_sample.conf

/etc/nova/nova.conf

/etc/nova/policy.json

/etc/nova/rootwrap.conf

/etc/polkit-1/localauthority/50-local.d/50-nova.pkla

/etc/polkit-1/rules.d/50-nova.rules

/etc/sudoers.d/nova

5. 查询特定 RPM 包的文档文件

命令格式:rpm-qd package_name

一些软件,尤其是大型项目的关键组件,在安装时会同时安装文档文件以方便软件的使用。定位 RPM 文档文件,示例如下:

清单 9. 查询已安装软件包的文档文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

[[email protected] ~]# rpm -qd mysql

/usr/share/doc/mysql-5.1.73/COPYING

/usr/share/doc/mysql-5.1.73/README

/usr/share/doc/mysql-5.1.73/README.mysql-docs

/usr/share/doc/mysql-5.1.73/README.mysql-license

/usr/share/man/man1/my_print_defaults.1.gz

/usr/share/man/man1/mysql.1.gz

/usr/share/man/man1/mysql_config.1.gz

/usr/share/man/man1/mysql_find_rows.1.gz

/usr/share/man/man1/mysql_waitpid.1.gz

/usr/share/man/man1/mysqlaccess.1.gz

/usr/share/man/man1/mysqladmin.1.gz

/usr/share/man/man1/mysqldump.1.gz

/usr/share/man/man1/mysqlshow.1.gz

/usr/share/man/man1/mysqlslap.1.gz

6. 查询特定 RPM 包安装文件的状态

命令格式:rpm -qs package_name

清单 10. 查询已安装软件包文件状态

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

[[email protected] ~]# rpm -qs pytz

normal        /usr/lib/python2.6/site-packages/pytz

missing       /usr/lib/python2.6/site-packages/pytz-2010h-py2.6.egg-info

normal        /usr/lib/python2.6/site-packages/pytz/__init__.py

normal        /usr/lib/python2.6/site-packages/pytz/__init__.pyc

normal        /usr/lib/python2.6/site-packages/pytz/__init__.pyo

normal        /usr/lib/python2.6/site-packages/pytz/reference.py

normal        /usr/lib/python2.6/site-packages/pytz/reference.pyc

normal        /usr/lib/python2.6/site-packages/pytz/reference.pyo

normal        /usr/lib/python2.6/site-packages/pytz/tzfile.py

normal        /usr/lib/python2.6/site-packages/pytz/tzfile.pyc

normal        /usr/lib/python2.6/site-packages/pytz/tzfile.pyo

normal        /usr/lib/python2.6/site-packages/pytz/tzinfo.py

normal        /usr/lib/python2.6/site-packages/pytz/tzinfo.pyc

normal        /usr/lib/python2.6/site-packages/pytz/tzinfo.pyo

normal        /usr/share/doc/pytz-2010h

normal        /usr/share/doc/pytz-2010h/CHANGES.txt

normal        /usr/share/doc/pytz-2010h/LICENSE.txt

normal        /usr/share/doc/pytz-2010h/README.txt

RPM 文件状态通常有四种,详细说明见下表:

表 1. RPM 文件的状态
状态 说明
Normal 正常,表明文件未被其他软件包修改过
not installed 未安装,表明文件未安装
Replaced 已替换,表明文件已被其他软件包修改替换过,不再是原先的文件
net shared 网络共享,表明文件处于网络共享状态

7. 列出特定 RPM 包已安装的所有文件

命令格式:rpm -ql package_name

软件源码中的一些文件是需要安装到系统中的,我们可以使用这个命令来确认安装文件位置是否正确、内容是否缺失等。比如,查询 openstack-glance 安装在系统中的文件:

清单 11. 列出 RPM 包安装在系统中的所有文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

[[email protected] ~]# rpm -ql openstack-glance

/etc/glance

/etc/glance/glance-api-paste.ini

/etc/glance/glance-api.conf

/etc/glance/glance-cache.conf

/etc/glance/glance-registry-paste.ini

/etc/glance/glance-registry.conf

/etc/glance/glance-scrubber.conf

/etc/glance/policy.json

/etc/glance/schema-image.json

/etc/logrotate.d/openstack-glance

/usr/bin/glance-api

/usr/bin/glance-cache-cleaner

/usr/bin/glance-cache-manage

/usr/bin/glance-cache-prefetcher

/usr/bin/glance-cache-pruner

/usr/bin/glance-control

/usr/bin/glance-index

# The following lines are omitted

注意:该命令仅适用于已安装的 RPM 包。对于尚未安装的包,如果我们想知道其中包含哪些文件,可以使用 rpm2cpio 命令查看。

命令格式:rpm2cpio package_name.rpm | cpio -t

查看未安装的 RPM 包中的文件,示例如下:

清单 12. 使用 rpm2cpio 命令查询未安装的 RPM 包含有的文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

[[email protected] rpmbuild-python-passlib]# ll RPMS/noarch/

total 488

-rw-r--r-- 1 root root 497772 Sep 25 22:58 python-passlib-1.6.5-1.ibm.noarch.rpm

[[email protected] noarch]# rpm -ql python-passlib

package python-passlib is not installed

[[email protected] noarch]# rpm2cpio python-passlib-1.6.5-1.ibm.noarch.rpm | cpio -t

./usr/lib/python2.7/site-packages/passlib

./usr/lib/python2.7/site-packages/passlib-1.6.5-py2.7.egg-info

./usr/lib/python2.7/site-packages/passlib-1.6.5-py2.7.egg-info/PKG-INFO

./usr/lib/python2.7/site-packages/passlib-1.6.5-py2.7.egg-info/SOURCES.txt

./usr/lib/python2.7/site-packages/passlib-1.6.5-py2.7.egg-info/dependency_links.txt

./usr/lib/python2.7/site-packages/passlib-1.6.5-py2.7.egg-info/pbr.json

./usr/lib/python2.7/site-packages/passlib-1.6.5-py2.7.egg-info/top_level.txt

./usr/lib/python2.7/site-packages/passlib-1.6.5-py2.7.egg-info/zip-safe

./usr/lib/python2.7/site-packages/passlib/__init__.py

./usr/lib/python2.7/site-packages/passlib/_setup

./usr/lib/python2.7/site-packages/passlib/_setup/__init__.py

./usr/lib/python2.7/site-packages/passlib/_setup/docdist.py

./usr/lib/python2.7/site-packages/passlib/_setup/stamp.py

# The following lines are omitted

8. 查询系统中某文件是属于哪个 RPM 包

命令格式:rpm -ql file_name

我们知道 Linux 系统中,python 的安装文件放在 /var/lib/python*/site-packages/ 目录下,如果你突然对其中的某个文件的来源很好奇,可以用这个命令来查询它是属于哪一个 RPM 包的。示例如下:

清单 13. 查询某个文件是源自哪个 RPM 包

1

2

3

4

5

[[email protected] site-packages]# pwd

/usr/lib/python2.7/site-packages

[[email protected] site-packages]#

rpm -qf WSME-0.6-py2.7-nspkg.pth

python-wsme-0.6-2.ibm.el7.noarch

9. 查询 RPM 包安装、卸载前后的脚本

命令格式:rpm -q --scripts package_name

通常,RPM 包可以在安装、卸载前后做些特定的操作,比如:在安装 RPM 前进行冲突检测、创建用户和组等操作;在安装 RPM 后根据软件需要启动服务或修改文件属性或配置等工作。示例如下:

清单 14. 显示软件包安装、卸载前后运行的脚本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

[[email protected] ~]# rpm -q --scripts mysql-server

preinstall scriptlet (using /bin/sh):

/usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || :

/usr/sbin/useradd -M -N -g mysql -o -r -d /var/lib/mysql -s /bin/bash \

       -c "MySQL Server" -u 27 mysql >/dev/null 2>&1 || :

postinstall scriptlet (using /bin/sh):

if [ $1 = 1 ]; then

   /sbin/chkconfig --add mysqld

fi

/bin/chmod 0755 /var/lib/mysql

/bin/touch /var/log/mysqld.log

preuninstall scriptlet (using /bin/sh):

if [ $1 = 0 ]; then

   /sbin/service mysqld stop >/dev/null 2>&1

   /sbin/chkconfig --del mysqld

fi

postuninstall scriptlet (using /bin/sh):

if [ $1 -ge 1 ]; then

   /sbin/service mysqld condrestart >/dev/null 2>&1 || :

fi

10. 查看 RPM 包的修改历史

命令格式:rpm -q --changelog package_name

查看修改历史,有助于我们了解软件包的功能,特别是在决定修改、增删 patch 的时候,研究 changelog 可以帮助我们做出正确的决定。查看 RPM 包修改历史,示例如下:

清单 15. 查看软件包的修改历史

1

2

3

4

5

6

7

8

9

10

11

12

[[email protected] ~]# rpm -q --changelog python-oslo-db

* Mon Mar 23 2015 Gang Xu <xugangsh@cn.ibm.com> - 1.7.1-1.ibm

- Fix rtc 197582 to update to 1.7.1 in Kilo

* Sun Mar 08 2015 Gang Xu <xugangsh@cn.ibm.com> - 1.5.0-3.ibm

- Fix rtc 196366 to add one patch to remove import testresources and

- testscenarios in oslo.db 1.5.0

* Fri Mar 06 2015 Wen Jianjiao <wenjianj@cn.ibm.com> - 1.5.0-1.ibm

- Update dependency version since oslo.db requirements.txt changed

- Related RTC 196366

# The following lines are omitted

11. 列出特定组群已安装的 RPM 包

命令格式:rpm -qg group_name

RPM 包的基本信息中有一项是组(Group),它定义了 RPM 包所属的类别。我们可以使用 rpm 命令查询定义在某个组下的全部 RPM 包。比如,列出系统中安装的应用程序数据库(Applications/Databases)相关的 RPM 包。

清单 16. 查询某个组群里的 RPM 包

1

2

3

4

5

6

7

8

9

[[email protected] ~]# rpm -qg Applications/Databases

sqlite-3.6.20-1.el6.x86_64

db4-utils-4.7.25-18.el6_4.x86_64

postgresql-libs-8.4.20-2.el6_6.x86_64

postgresql-8.4.20-2.el6_6.x86_64

mysql-libs-5.1.73-5.el6_6.x86_64

mysql-5.1.73-5.el6_6.x86_64

mysql-server-5.1.73-5.el6_6.x86_64

mysql-devel-5.1.73-5.el6_6.x86_64

通 常,RPM 可以分为这几大类:娱乐(Amusement)、开发(Development)、文档(Document)、硬件(Hardware)、综合包 (Metapackages)、多媒体(Multimedia)、生产力(Productivity)和系统(System)。清单 15. 列出了常见的 Group:

清单 17. RPM 常见 Group

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

Amusements/Games

Amusements/Graphics

Applications/Archiving

Applications/Communications

Applications/Databases

Applications/Editors

Applications/Emulators

Applications/Engineering

Applications/File

Applications/Internet

Applications/Multimedia

Applications/Productivity

Applications/Publishing

Applications/System

Applications/Text

Development/Debuggers

Development/Languages

Development/Libraries

Development/System

Development/Tools

Documentation

System Environment/Base

System Environment/Daemons

System Environment/Kernel

System Environment/Libraries

System Environment/Shells

User Interface/Desktops

User Interface/X

User Interface/X Hardware Support

RPM 包依赖关系查询

Linux 系统中,RPM 之间往往存在依赖关系,即一个软件可能应用到其他软件提供的某些功能。RPM 依赖机制,极大地减少了软件系统的冗余,且方便了软件包的版本升级、安装和卸载、冲突检查等,从而有利于系统的维护和管理。

RPM 在描述软件包之间依赖关系时,使用了一个术语:能力(capability)。"能力"可理解为软件功能的一种抽象,定义每个 RPM 包会提供一种或多种"能力",某些 RPM 包会依赖其他包提供的"能力"。

RPM Database 通过记录已安装的软件包所依赖的和提供的"能力"信息,来表示软件之间的依赖关系。在安装某个 RPM 包时,系统会自动检测该包所依赖的"能力"是否已安装,如果是的则可以安装该包。成功安装后,该包提供的"能力"会被保存至 RPM Database。如果系统中缺少任何其依赖的"能力",则提示错误信息无法安装;在卸载某个 RPM 包时,系统会自动检测该包所提供的"能力"是否仍被其他 RPM 包使用,如果尚被其他 RPM 包依赖,则无法卸载。这一小节中,我们介绍如何查询 RPM Database 中记录的 RPM 包和"能力"之间的依赖、供给关系。

1. 查询特定 RPM 包依赖哪些"能力"

命令格式:rpm -q query_options --requires package_namee

大多数情况下,"能力"用文件名或者软件包的名字表示。上面的命令将列出软件包依赖的所有"能力",比如:

清单 18. 查询 RPM 包依赖的“能力”

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

[[email protected] ~]# rpm -q --requires python-keystoneclient

/usr/bin/python

python(abi) = 2.7

python-argparse

python-iso8601 >= 0.1.9

python-keyring

python-netaddr >= 0.7.12

python-oslo-config >= 1:1.9.0

python-oslo-i18n >= 1.3.0

python-oslo-serialization >= 1.2.0

python-oslo-utils >= 1.2.0

python-pbr >= 0.6

python-pbr < 1.0

python-prettytable > 0.7

python-prettytable < 0.8

python-requests >= 2.2.0

python-six >= 1.9.0

python-stevedore >= 1.1.0

rpmlib(CompressedFileNames) <= 3.0.4-1

rpmlib(FileDigests) <= 4.6.0-1

rpmlib(PartialHardlinkSets) <= 4.0.4-1

rpmlib(PayloadFilesHavePrefix) <= 4.0-1

rpmlib(PayloadIsXz) <= 5.2-1

2. 查询特定 RPM 包提供哪些"能力"

命令格式:rpm -q query_options --provides package_name

RPM 包会对外提供某些"能力",比如:

清单 19. 查询 RPM 包提供的“能力”

1

2

3

4

5

6

7

8

9

[[email protected] ~]# rpm -q --provides python-six

python-six = 1.9.0-1.ibm.el7

[[email protected] ~]# rpm -q --provides bash

/bin/bash

/bin/sh

bash = 4.2.46-12.el7

bash(x86-64) = 4.2.46-12.el7

config(bash) = 4.2.46-12.el7

通常"能力"与包名相同,我们也可以在 spec 文件中指定 RPM 提供哪些能力。

语法格式:Provides: capability

3. 查询依赖某种"能力"的 RPM 包

命令格式:rpm -q query_options --whatrequires capability

这个命令可以查询到所有依赖该"能力"的 RPM 包,比如:

清单 20. 查询依赖某“能力”的 RPM 包

1

2

3

4

5

6

[[email protected] ~]# rpm -q --whatrequires openssl

perl-IO-Socket-SSL-1.94-3.el7.noarch

unbound-libs-1.4.20-19.el7.x86_64

python-cryptography-0.8.1-1.ibm.el7.x86_64

python-nova-2015.1.1.1-201509142203.ibm.el7.140.noarch

openvswitch-2.3.0-3.ibm.el7.x86_64

卸载 RPM 包时,如果其提供的"能力"被其他的 RPM 包所依赖,则卸载命令会生成一个错误信息,最终无法卸载此包。比如:

清单 21. openssl 被其他 RPM 包依赖,卸载失败

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[[email protected]-osee-kilo-rh7 ~]# rpm -e openssl

error: Failed dependencies:

       openssl >= 0.9.8 is needed by (installed)

        perl-IO-Socket-SSL-1.94-3.el7.noarch

       openssl >= 0.9.8g-12 is needed by (installed)

        unbound-libs-1.4.20-19.el7.x86_64

       openssl is needed by (installed)

       python-cryptography-0.8.1-1.ibm.el7.x86_64

       openssl is needed by (installed)

       python-nova-2015.1.1.1-201509142203.ibm.el7.140.noarch

       openssl is needed by (installed)

       openvswitch-2.3.0-3.ibm.el7.x86_64

   /usr/bin/openssl is needed by (installed)

    authconfig-6.2.8-9.el7.x86_64

此时,如仍需卸载,可以加上参数 --nodeps(不考虑依赖关系)来强制卸载。

命令格式:rpm -e --nodeps package_name

注意:强制卸载可能导致系统瘫痪,请慎用此命令!

4. 查询提供某种"能力"的 RPM 包

命令格式:rpm -q query_options --whatprovides capability

现在,我们用这个命令来验证上面提到的 openssl "能力"确实由 openssl RPM 包提供。

清单 22. 查询提供某“能力”的 RPM 包

1

2

[[email protected] ~]# rpm -q --whatprovides openssl

openssl-1.0.1e-42.el7.x86_64

提示:一般情况下,一种"能力"由一个 RPM 提供,如果多个 RPM 都提供同一种"能力",则可能产生冲突(conflicts)。

文件转自:https://www.ibm.com/developerworks/cn/linux/1609_wenjj_rpm/index.html

原文地址:https://www.cnblogs.com/luck123/p/8309489.html

时间: 2024-10-03 14:11:03

RPM Database 实战详解的相关文章

Scala 深入浅出实战经典 第78讲:Type与Class实战详解

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/2vZ06RMcD6I/优酷:http://v.youku.com/v_show/id

Scala 深入浅出实战经典 第53讲:Scala中结构类型实战详解

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/pR_4sY0cJLs/优酷:http://v.youku.com/v_show/id_

Dream------scala--类的属性和对象私有字段实战详解

Scala类的属性和对象私有字段实战详解 一.类的属性 scala类的属性跟java有比较大的不同,需要注意的是对象的私有(private)字段 1.私有字段:字段必须初始化(当然即使不是私有字段也要赋值) 2.属性默认是public级别的,而且无法用public修饰. 3.可以有很多类,并且默认是public级别(如果声明的时候加上会报错,不知为何) 4.如果属性是public的,会默认生成类属性的getter和setter方法,无需显示的提供getter,setter方法 5.私有字段(用p

第131讲:Hadoop集群管理工具均衡器Balancer 实战详解学习笔记

第131讲:Hadoop集群管理工具均衡器Balancer 实战详解学习笔记 为什么需要均衡器呢? 随着集群运行,具体hdfs各个数据存储节点上的block可能分布得越来越不均衡,会导致运行作业时降低mapreduce的本地性. 分布式计算中精髓性的一名话:数据不动代码动.降低本地性对性能的影响是致使的,而且不能充分利用集群的资源,因为导致任务计算会集中在部分datanode上,更易导致故障. balancer是hadoop的一个守护进程.会将block从忙的datanode移动到闲的datan

Scala 深入浅出实战经典 第57讲:Scala中Dependency Injection实战详解

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/5LnLNDBKvi8/优酷:http://v.youku.com/v_show/id_

Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/a6qIB7SqOlc/优酷:http://v.youku.com/v_show/id_

第130讲:Hadoop集群管理工具DataBlockScanner 实战详解学习笔记

第130讲:Hadoop集群管理工具DataBlockScanner 实战详解学习笔记 DataBlockScanner在datanode上运行的block扫描器,定期检测当前datanode节点上所有的block,从而在客户端读到有问题的块前及时检测和修复有问题的块. 它有所有维护的块的列表,通过对块的列表依次的扫描,查看是否有校验问题或错误问题,它还有截流机制. 什么叫截流机制?DataBlockScanner扫描时会消耗大量的磁盘带宽,如果占用磁盘带宽太大,会有性能问题.所以它会只占用一小

《iOS 7 应用开发实战详解》

<iOS 7 应用开发实战详解> 基本信息 作者: 朱元波    管蕾 出版社:人民邮电出版社 ISBN:9787115343697 上架时间:2014-4-25 出版日期:2014 年5月 开本:16开 页码:382 版次:1-1 所属分类:计算机 > 软件与程序设计 > 移动开发 > iPhone 更多关于>>><iOS 7 应用开发实战详解> 编辑推荐 新版本 全面讲解了iOS 7开发的各种技术 热门技术 基本控件.数据存储.多场景处理.界

Scala 深入浅出实战经典 第60讲:Scala中隐式参数实战详解以及在Spark中的应用源码解析

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/IVN4EuFlmKk/优酷:http://v.youku.com/v_show/id_