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
|
[root@nimbus-bvt-osee-kilo-rh7 ~]# 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
|
[root@server01 ~]# 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
|
[root@nimbus-bvt-osee-kilo-rh7 ~]# 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
|
[root@server01 ~]# 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
|
[root@server01 ~]# rpm -q mysql-server mysql-server-5.1.73-5.el6_6.x86_64 [root@nimbus-bvt-osee-kilo-rh7 ~]# rpm -q docker-engine package docker-engine is not installed |
注意:实际操作中,请确认 package_name 拼写正确!查询时输错包名,会返回此包未安装的提示信息,常常给系统管理员带来误导。比如:
清单 6. 查询拼写错误的包名,返回此包未安装
1
2
|
[root@server01 ~]# 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
|
[root@server01 ~]# 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
|
[root@nimbus-bvt-osee-kilo-rh7 ~] # 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
|
[root@server01 ~]# 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
|
[root@server01 ~]# 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
|
[root@nimbus-bvt-osee-kilo-rh7 ~]# 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
|
[root@server01 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 [root@server01 noarch]# rpm -ql python-passlib package python-passlib is not installed [root@server01 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
|
[root@nimbus-bvt-osee-kilo-rh7 site-packages]# pwd /usr/lib/python2.7/site-packages [root@nimbus-bvt-osee-kilo-rh7 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
|
[root@server01 ~]# 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
|
[root@nimbus-bvt-osee-kilo-rh7 ~]# 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
|
[root@server01 ~]# 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
|
[root@nimbus-bvt-osee-kilo-rh7 ~]# 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
|
[root@nimbus-bvt-osee-kilo-rh7 ~]# rpm -q --provides python-six python-six = 1.9.0-1.ibm.el7 [root@nimbus-bvt-osee-kilo-rh7 ~]# 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
|
[root@nimbus-bvt-osee-kilo-rh7 ~]# 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
|
[root@nimbus-bvt-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
|
[root@nimbus-bvt-osee-kilo-rh7 ~]# 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
RPM Database 实战详解的更多相关文章
- Linux中用postfix搭建邮件服务器实战详解
Linux中用postfix搭建邮件服务器实战详解 postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件.Postfix试图更快.更容易管理.更安全,同时 ...
- 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING
<Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th 2014 Email:skyseraph00@163.com 更多精彩请直接 ...
- 011-Scala中的apply实战详解
011-Scala中的apply实战详解 object中的apply方法 class中的apply方法 使用方法 apply方法可以应用在类或者Object对象中 class类 必须要创建实例化的类对 ...
- 010-Scala单例对象、伴生对象实战详解
010-Scala单例对象.伴生对象实战详解 Scala单例对象详解 函数的最后一行是返回值 子项目 Scala伴生对象代码实战 object对象的私有成员可以直接被class伴生类访问,但是不可以被 ...
- 008-Scala主构造器、私有构造器、构造器重载实战详解
008-Scala主构造器.私有构造器.构造器重载实战详解 Scala主构造器实战 无参数的主构造器 分析 1.name 需要赋初值,一般通过占位符来代表空值 2.private 声明私有的age 生 ...
- 009-Scala的内部类实战详解
009-Scala的内部类实战详解 Scala内部类详解 与java的区别 java的内部类是从属于外部类的 Scala的内部类是从属于对象的 内部类在调用方法的时候传递的内部类只能是由自己本身 欢迎 ...
- 007-Scala类的属性和对象私有字段实战详解
007-Scala类的属性和对象私有字段实战详解 Scala类的使用实战 变量里的类必须赋初值 def函数时如果没参数可不带括号 2.不需要加Public声明 getter与setter实战 gett ...
- 005-Scala数组操作实战详解
005-Scala数组操作实战详解 Worksheet的使用 交互式命令执行平台 记得每次要保存才会出相应的结果 数组的基本操作 数组的下标是从0开始和Tuple不同 缓冲数组ArrayBuffer( ...
- 《Node.js开发实战详解》学习笔记
<Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...
随机推荐
- Java开发笔记(六十六)映射:HashMap和TreeMap
前面介绍了两种集合的用法,它们的共性为每个元素都是唯一的,区别在于一个无序一个有序.虽说往集合里面保存数据还算容易,但要从集合中取出数据就没那么方便了,因为集合居然不提供get方法,没有get方法怎么 ...
- Mybatis框架基础支持层——反射工具箱之泛型解析工具TypeParameterResolver(4)
简介:TypeParameterResolver是一个工具类,提供一系列的静态方法,去解析类中的字段.方法返回值.方法参数的类型. 在正式介绍TypeParameterResolver之前,先介绍一个 ...
- 如何把activity当成dialog
在工作中有时候需要把activity当成dialog使用,其实做法挺简单的. 1.设置activity的style <style name="DialogTheme" par ...
- 搭建MHA时 yum 安装perl模块提示 baseurl 错误
今天在搭建MySQL MHA 安装MHA node所需的perl模块(DBD:mysql)时遇到了一个小的错误,如果思路不对的话,还是产生不少麻烦. 现梳理记录下来. 问题现象 执行的命令 yum ...
- 使用 Dashboard - 每天5分钟玩转 Docker 容器技术(174)
上一节我们完成了 Kubernetes Dashboard 的安装,本节就来实践一下. Dashboard 界面结构 Dashboard 的界面很简洁,分为三个大的区域. 顶部操作区在这里用户可以搜索 ...
- python 爬取全本免费小说网的小说
这几天朋友说想看电子书,但是只能在网上看,不能下载到本地后看,问我有啥办法?我找了好几个小说网址看了下,你只能直接在网上看,要下载txt要冲钱买会员,而且还不能在浏览器上直接复制粘贴.之后我就想到py ...
- C#窗体打包步骤
1.在项目下选择InstallerProjects的Setup Project建立打包工具. 2.找到项目bin目录Release下的文件全部复制下来. 3.复制完之后全部粘贴到Application ...
- Java - String 的字面量、常量池、构造函数和intern()函数
一.内存中的 String 对象 Java 的堆和栈 对于基本数据类型变量和对象的引用,也就是局部变量表属于栈内存: 而通过 new 关键字和 constructor 创建的对象存放在堆内存: 直接的 ...
- Navicat如何导出Excel格式表结构
SELECTCOLUMN_COMMENT 字段名,COLUMN_NAME code,COLUMN_TYPE 数据类型,DATA_TYPE 字段类型,CHARACTER_MAXIMUM_LENGTH 长 ...
- Canvas中的非零环绕
先上图 当要填充图形时,必须区分开哪些部分是覆盖的,哪些是空的,根据绘制的方向可以判断出来 非零环绕规则:对于路径中指定范围区域,从该区域内部画一条足够长的线段,使此线段的完全落在路径范围之外. 非零 ...