文章目录
- 一、命令介绍
- 二、语法结构
- 三、常用选项
- 用于查询和检查包
- 用于安装、升级和删除包
- 用于执行其他功能
- 四、命令示例
- (一)查询和检查包
- 1. 查看一个已安装包的信息(版本、用途等)
- 2. 查看与指定程序相关的所有安装文件
- 3. 查看一个已经安装的 rpm 包的配置文件列表
- 4.查看所有需要依赖指定 rpm 包的软件包列表
- 5. 查看哪个包提供某一功能
- 6. 查看安装/删除指定的软件包期间所执行的脚本
- 7. 查询指定文件所属的软件包,即查询文件或命令属于哪个软件包
- 8. 确认一个 rpm 包的完整性
- 9. 查询一个包是否安装
- 10. 确认一个 rpm 包还未安装
- 11. 检验已安装的软件包是否被修改过
- 12. 检查系统中所有已安装的 rpm 包(小心使用 !!)
- 13. 查看系统中所有已经安装的 rpm 包
- 14. 查看与 MySQL 有关的已安装的软件包列表
- 15. 查看与某个程序有关的所有已安装的软件包
- 16. 查看一个尚未安装的 rpm 包的文件列表
- 17. 查看一个已经安装的 rpm 包的文件列表
- 18. 查看指定的 rpm 软件包所包含的文件
- 19. 查看一个软件包的信息(版本、用途等)
- 20. 查询哪个软件包安装(提供/包含)指定的程序(只能查询指定的程序)
- 21. 查询哪个软件包安装(包含/提供)指定的文件(能查询所有指定的文件)
- 22. 查看指定软件包的依赖关系(查看指定软件包依赖/需要哪些功能)
- 23. 查看一个 rpm 包的修改历史
- (二)安装、升级和删除包
- 1. 安装软件包
- 2. 升级软件包
- 3. 卸载 rpm 软件包
- 4. 安装 .src.rpm 软件包
- 5. 修复被破坏的软件包
- (三)执行其他功能
- 1. 导入公钥数字证书
- 2. 从一个 rpm 包运行可执行文件
- 3. 如何在不安装的情况下获取 rpm 包中的文件
- 五、参考文献
一、命令介绍
rpm
命令是 Red Hat Package Manager(RPM软件包管理器)的缩写, 该命令是用于管理基于 RPM 的 Linux 的软件包的工具。基于 RPM 的 Linux 操作系统,几乎所有的软件可以通过 rpm
进行安装、卸载及管理等操作。
rpm
原本是 Red Hat Linux 发行版专门用来管理各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
Red Hat 于 1995 年引入了 RPM。RPM 现在是 Linux Standard Base (LSB) 中采用的包管理系统。应该注意 rpm
是操作 RPM 的主要命令,而 .rpm 是 RPM 文件使用的扩展名。所以 “一个 rpm” 或 “某某 rpm” 一般是指 RPM 文件,而 rpm
通常指命令。
概括的说,rpm
命令包含了五种基本功能:安装、卸载、升级、查询和验证。
二、语法结构
语法格式:rpm [选项] [参数]
参数:指定要操纵的RPM软件包。
三、常用选项
rpm 命令选项分为三组:查询和检查包,安装、升级和删除包以及执行其他功能。
用于查询和检查包
选项 | 说明 |
---|---|
-a | 查询所有已经安装的套件(即软件包) |
-f | 查询拥有指定文件的套件(即软件包),即查询文件或命令属于哪个软件包 |
-d | Document. 只列出文本文件,本参数需配合 -l 参数使用 |
-c | 只列出组态配置文件,本参数需配合 -l 参数使用 |
-i | Information. 后面如果跟着软件名,没有后缀 .rpm ,可以查看该软件的有关信息,需要配合选项 -q 才能使用 |
-l | List. 显示套件(即软件包)的文件列表 |
-p | Package. 查询指定的 RPM 套件档,即查询指定的RPM软件包 |
-q | Query. 表示查询 |
-R | 显示套件的关联性信息,即显示软件包的依赖关系 |
-s | Status. 显示文件状态,本参数需配合-l 参数使用 |
-v | 笼统地显示指令执行过程 |
-vv | 比较详细地显示指令执行过程,便于排错 |
-vvv | 更加详细地显示指令执行过程 |
-h 或 --hash | 软件包安装的时候列出哈希标记(和 -v 一起使用效果更好),以"#"号显示程序执行进度 |
-V 或 --verify 或 -y | 对与指定 RPM 软件包相关的文件进行校验。若无输出,则表示已安装的软件没有被修改;若软件被修改,则会输出信关信息 |
-Va | 校验所有的 RPM 软件包 |
-? 或 --help | 显示帮助信息 |
--usage | 显示简短的使用说明 |
用于安装、升级和删除包
选项 | 说明 |
---|---|
-e 或 --erase | 卸载软件包 |
-h 或 --hash | 套件安装时列出标记,即安装软件包时列出标记,显示安装进度 |
-i 或者 --install | 安装指定的套件档,即安装软件包 |
-U 或 --upgrade | 升级指定的套件档(即软件包),后面接的套件若没有安装过,则系统将直接安装该套件 |
-F | 升级指定的套件档,后面接的套件若没有安装过,则该套件不会安装。升级或刷新已经安装的包 |
--nodeps | 忽略依赖关系警告,当要安装的 rpm 包依赖其他包时,即使其他包没有安装,也可以安装这个包 |
--force | 强制安装,即使覆盖属于其他包的文件也要安装 |
--ignorearch | 忽略主机构架 |
--test | 仅作测试,不真正执行,可用于测试安装,测试卸载 |
--replacepkgs | 重新安装。替换原有的安装 |
--initdb | 新建RPM的数据库 |
--rebuilddb | 重建RPM的数据库 |
--percent | Print percentages as files are unpacked from the package archive. |
用于执行其他功能
选项 | 说明 |
---|---|
-b 或 -t | 设置包装套件的完成阶段,并指定套件档(即软件包)的文件名称 |
四、命令示例
(一)查询和检查包
1. 查看一个已安装包的信息(版本、用途等)
[root@htlwk0001host ~]# rpm -qi openssh-server-8.0p1-4.el8_1.x86_64
Name : openssh-server
Version : 8.0p1
Release : 4.el8_1
Architecture: x86_64
Install Date: 2020年07月17日 星期五 09时54分09秒
Group : System Environment/Daemons
Size : 1461534
License : BSD
Signature : RSA/SHA256, 2020年02月05日 星期三 08时08分05秒, Key ID 05b555b38483c65d
Source RPM : openssh-8.0p1-4.el8_1.src.rpm
Build Date : 2020年02月05日 星期三 00时01分36秒
Build Host : x86-01.mbox.centos.org
Relocations : (not relocatable)
Packager : CentOS Buildsys <bugs@centos.org>
Vendor : CentOS
URL : http://www.openssh.com/portable.html
Summary : An open source SSH server daemon
Description :
OpenSSH is a free version of SSH (Secure SHell), a program for logging
into and executing commands on a remote machine. This package contains
the secure shell daemon (sshd). The sshd daemon allows SSH clients to
securely connect to your SSH server.
说明:只能使用 -qi
,而且必须按这个顺序,使用 -iq
还不行,仅使用 -i
也不行,真 tmd 奇葩!已安装的软件包,不能使用后缀名 .rpm
,否则报错。
2. 查看与指定程序相关的所有安装文件
例如,查看与 MySQL
相关的所有安装文件:
[root@htlwk0001host bin]# rpm -qal|grep mysql
/etc/logrotate.d/mysql
/usr/bin/mysql_install_db
/usr/bin/mysql_plugin
/usr/bin/mysql_secure_installation
/usr/bin/mysql_ssl_rsa_setup
/usr/bin/mysql_tzinfo_to_sql
/usr/bin/mysql_upgrade
/usr/bin/mysqld_pre_systemd
/usr/bin/mysqldumpslow
/usr/lib/systemd/system/mysqld.service
/usr/lib/systemd/system/mysqld@.service
/usr/lib/tmpfiles.d/mysql.conf
3. 查看一个已经安装的 rpm 包的配置文件列表
[root@htlwk0001host mysql]# rpm -qc mysql-community-server-5.7.31-1.el7.x86_64
/etc/logrotate.d/mysql
/etc/my.cnf
4.查看所有需要依赖指定 rpm 包的软件包列表
[root@htlwk0001host mysql]# rpm -q --whatrequires mysql-community-server-5.7.31-1.el7.x86_64.rpm # mysql-community-server-5.7.31-1.el7.x86_64.rpm 是被依赖者
没有软件包需要 mysql-community-server-5.7.31-1.el7.x86_64.rpm
5. 查看哪个包提供某一功能
使用 rpm 查明哪个包提供 gcl-selinux(x86-64) 功能:
[ian@echidna ~]$ rpm -q --whatprovides 'gcl-selinux(x86-64)'
gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64
6. 查看安装/删除指定的软件包期间所执行的脚本
[root@htlwk0001host mysql]# rpm -q --scripts mysql-community-server-5.7.31-1.el7.x86_64.rpm
7. 查询指定文件所属的软件包,即查询文件或命令属于哪个软件包
[root@htlwk0001host mysql]# rpm -qf /etc/httpd/conf/httpd.conf
httpd-2.4.37-21.module_el8.2.0+382+15b0afa8.x86_64
注意:这里要使用文件的绝对路径。
你可以使用命令 which 查询命令的绝对路径:
[root@htlwk0001host ~]# which mysql
/usr/bin/mysql
再查询该文件所属的软件包:
[root@htlwk0001host ~]# rpm -qf /usr/bin/mysql
mysql-community-client-5.7.31-1.el7.x86_64
你也可以把这两条命令连起来写:
[root@htlwk0001host ~]# rpm -qf `which mysql`
mysql-community-client-5.7.31-1.el7.x86_64
which mysql
这条命令是由两个“反撇号”引起来的,这代表引用反引号里面的命令所产生的结果。
也可以使用如下的形式查询:
[root@htlwk0001host ~]# rpm -qf $(which mysql)
mysql-community-client-5.7.31-1.el7.x86_64
8. 确认一个 rpm 包的完整性
[root@htlwk0001host mysql]# rpm --checksig package.rpm
9. 查询一个包是否安装
[root@htlwk0001host ~]# rpm -q mysql-community-server
mysql-community-server-5.7.31-1.el7.x86_64
10. 确认一个 rpm 包还未安装
[root@htlwk0001host mysql]# rpm -Vp package.rpm
11. 检验已安装的软件包是否被修改过
检查软件包 package_name 是否被修改过,检查的项目包括:文件尺寸、 许可、类型、所有者、群组、MD5以及最后修改时间等。
[root@htlwk0001host mysql]# rpm -V package_name
如果包没有被修改过,这个命令没有输出。
12. 检查系统中所有已安装的 rpm 包(小心使用 !!)
[root@htlwk0001host mysql]# rpm -Va
13. 查看系统中所有已经安装的 rpm 包
[root@htlwk0001host mysql]# rpm -qa
perl-Pod-Perldoc-3.28-396.el8.noarch
os-prober-1.74-6.el8.x86_64
biosdevname-0.7.3-2.el8.x86_64
python3-pip-wheel-9.0.3-16.el8.noarch
perl-CPAN-Meta-2.150010-396.el8.noarch
建议用下面这个组合命令:
[root@htlwk0001host ~]# rpm -qa | sort | less
注:sort
默认会按字母大小排序,然后输出给命令 less
显示。
14. 查看与 MySQL 有关的已安装的软件包列表
[root@htlwk0001host bin]# rpm -qa|grep mysql
mysql-community-server-5.7.31-1.el7.x86_64
mysql-community-common-5.7.31-1.el7.x86_64
mysql57-community-release-el7-10.noarch
mysql-community-client-5.7.31-1.el7.x86_64
php-mysqlnd-7.2.24-1.module_el8.2.0+313+b04d0a66.x86_64
mysql-community-libs-5.7.31-1.el7.x86_64
15. 查看与某个程序有关的所有已安装的软件包
例如,查看已安装的与 mysql
有关的软件包名称:
[root@htlwk0001host mysql]# rpm -qa | grep mysql
mysql-community-server-5.7.31-1.el7.x86_64
mysql-community-common-5.7.31-1.el7.x86_64
mysql57-community-release-el7-10.noarch
mysql-community-client-5.7.31-1.el7.x86_64
php-mysqlnd-7.2.24-1.module_el8.2.0+313+b04d0a66.x86_64
mysql-community-libs-5.7.31-1.el7.x86_64
例如,显示所有名称中包含 httpd
字样的 rpm 包:
[root@htlwk0001host mysql]# rpm -qa | grep httpd
httpd-tools-2.4.37-21.module_el8.2.0+382+15b0afa8.x86_64
httpd-filesystem-2.4.37-21.module_el8.2.0+382+15b0afa8.noarch
centos-logos-httpd-80.5-2.el8.noarch
httpd-2.4.37-21.module_el8.2.0+382+15b0afa8.x86_64
16. 查看一个尚未安装的 rpm 包的文件列表
[root@htlwk0001host mysql]# rpm -qlp package.rpm
17. 查看一个已经安装的 rpm 包的文件列表
[root@htlwk0001host mysql]# rpm -ql mysql-community-server-5.7.31-1.el7.x86_64
/etc/logrotate.d/mysql
/etc/my.cnf
/etc/my.cnf.d
/usr/bin/innochecksum
/usr/bin/lz4_decompress
/usr/bin/my_print_defaults
/usr/bin/myisam_ftdump
18. 查看指定的 rpm 软件包所包含的文件
没有安装过的软件包,使用如下的命令语句:
[root@htlwk0001host mysql]# rpm -qlp mysql-community-libs-5.7.31-1.el7.x86_64.rpm
注:-p
表示后面指定具体的 rpm 包,p
是 package
的首字母。
已经安装过的软件包,使用如下的命令语句:
[root@htlwk0001host mysql]# rpm -ql mysql-community-libs-5.7.31-1.el7.x86_64
注:查看已经安装过的软件包,不需要选项 -p
,所以软件包的名称后面不要写后缀名 .rpm
。
19. 查看一个软件包的信息(版本、用途等)
没有安装过的软件包,使用如下命令语句:
[root@htlwk0001host mysql]# rpm -qip package_name.rpm
已经安装过的软件包,使用如下命令语句:
[root@htlwk0001host mysql]# rpm -qi mysql-community-libs-5.7.31-1.el7.x86_64
Name : mysql-community-libs
Version : 5.7.31
Release : 1.el7
Architecture: x86_64
Install Date: 2020年08月23日 星期日 15时46分46秒
Group : Applications/Databases
Size : 9928453
License : Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Under GPLv2 license as shown in the Description field.
Signature : DSA/SHA1, 2020年06月03日 星期三 18时07分52秒, Key ID 8c718d3b5072e1f5
Source RPM : mysql-community-5.7.31-1.el7.src.rpm
Build Date : 2020年06月02日 星期二 19时48分16秒
Build Host : siv27.no.oracle.com
Relocations : (not relocatable)
Packager : MySQL Release Engineering <mysql-build@oss.oracle.com>
Vendor : Oracle and/or its affiliates
URL : http://www.mysql.com/
Summary : Shared libraries for MySQL database client applications
Description :
This package contains the shared libraries for MySQL client
applications.
说明:只能使用 -qi
,而且必须按这个顺序,使用 -iq
还不行,奇葩!已安装的软件包,不能使用后缀名 .rpm
,否则报错。
20. 查询哪个软件包安装(提供/包含)指定的程序(只能查询指定的程序)
以下命令只适用于查询可执行的程序由哪个软件包所安装:
rpm -qf `which 程序名` # 返回软件包的全名
rpm -qif `which 程序名` # 返回软件包的有关信息
rpm -qlf `which 程序名` # 返回软件包的文件列表
例如,查看 mysql
是由哪个软件包安装的,如下:
[root@htlwk0001host mysql]# rpm -qf `which mysql`
mysql-community-client-5.7.31-1.el7.x86_64
[root@htlwk0001host mysql]# rpm -qf `which mysqld`
mysql-community-server-5.7.31-1.el7.x86_64
说明: 字符串 `which mysql` 所用的引号不是“单引号”,而是键盘左上角“波浪号” ~
下面的“捺符号”;-f
表示后面需要指定文件名,且必须是完整的文件路径;which mysql
是一条命令语句,会执行返回结果,即返回指定的命令文件 mysql
的所在路径。
21. 查询哪个软件包安装(包含/提供)指定的文件(能查询所有指定的文件)
👆上面那个只适用于可执行的程序,而下面的方法,不仅可以用于可执行程序,也可以用于普通的任何文件。首先你要知道这个文件名,然后查询该文件的完整路径,可以用 whereis
或者 which
,然后使用 rpm -qf
查询。
例如,查询命令文件 mysql
的完整路径,使用命令 which
,命令语句如下:
[root@htlwk0001host ~]# which mysql
/usr/bin/mysql
注意:which
只能查询命令的所在位置,不能查询非可执行文件的所在位置。
查询命令文件 mysql
的完整路径,使用命令 whereis
,如下:
[root@htlwk0001host ~]# whereis mysql
mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
你还要判断哪个才是命令文件 mysql 的路径,可以通过命令 file 查询,如下:
[root@htlwk0001host ~]# file /usr/bin/mysql
/usr/bin/mysql: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=afd62c3d3b2d3192af0ba4bb66bbc07a3ee3d168, with debug_info, not stripped
如上查询结果所示,ELF
说明是可执行的文件。
查询压缩包文件 mysql.1.gz
所在位置,使用命令 whereis
,如下:
[root@htlwk0001host ~]# whereis mysql.1.gz
mysql.1: /usr/share/man/man1/mysql.1.gz
使用命令 rpm -qf
查询文件 mysql.1.gz
是哪个软件包安装的,如下:
[root@htlwk0001host ~]# rpm -qf /usr/share/man/man1/mysql.1.gz
mysql-community-client-5.7.31-1.el7.x86_64
注意:如上查询某个文件属于哪个软件包提供的,需要输入该文件的完整的路径名才行。
如果你仅仅输入文件名称则会提示不存在该文件,如下:
[root@htlwk0001host ~]# rpm -qf mysql.q.gz
error: file /root/mysql.q.gz: No such file or directory
22. 查看指定软件包的依赖关系(查看指定软件包依赖/需要哪些功能)
[root@htlwk0001host ~]# rpm -qR mysql-community-server-5.7.31-1.el7.x86_64
/bin/bash
/bin/sh
/bin/sh
/bin/sh
注:
-R
必须大写,是requires
的首字母,含义是查询软件包的依赖性。- 如果要查询包文件而不是 RPM 数据库,那么添加 -p 选项并使用完整的 RPM 文件名。
23. 查看一个 rpm 包的修改历史
[root@htlwk0001host mysql]# rpm -q --changelog mysql-community-server-5.7.31-1.el7.x86_64
* 四 9月 05 2019 Bjorn Munch <bjorn.munch@oracle.com> - 5.7.28-1
- Add License Book, remove COPYING* 三 1月 24 2018 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.23-1
- Add perl modules for test subpackage* 三 1月 10 2018 Bjorn Munch <bjorn.munch@oracle.com> - 5.7.22-1
- No longer need to remove obsoleted mysqltest man pages
(二)安装、升级和删除包
1. 安装软件包
- 安装当前目录下的一个 rpm 包,并显示安装相关信息:
[root@linuxcool ~]# rpm -ivh package.rpm
- 按绝对路径安装 rpm 包,并显示安装相关信息:
[root@linuxcool ~]# rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm
- 安装一个 rpm 包,且忽略依赖关系警告:
[root@linuxcool ~]# rpm -ivh --nodeps package.rpm
安装过程中可能出现下面的警告或者提示:
... conflict with ...
可能是要安装的包里有一些文件可能会覆盖现有的文件,缺省时这样的情况下是无法正确安装的可以用rpm --force -i
强制安装即可
... is needed by ...
... is not installed ...
此包需要的一些软件你没有安装可以用rpm --nodeps -i
来忽略此信息,也就是说rpm -i --force --nodeps
可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能。
2. 升级软件包
- 升级指定的软件包,若没有安装,则会直接安装此软件包:
[root@linuxcool ~]# rpm -U package.rpm # 更新一个rpm包但不改变其配置文件
- 升级一个确定已经安装的软件包:
[root@linuxcool ~]# rpm -F package.rpm
通常情况下我们使用 -U 选项进行更新,尤其是在命令行包含 RPM 列表的情况下。这样的话,就会安装未安装的包,升级已经安装的包。常常使用另外两个选项 -v(详细)和 -h(# 标志)提供进度显示。下面的例子中说明了如何使用 rpm 命令更新 vim-common、vim-enhanced 和 vim-minimal 包。我们已经把 vim-common 和 vim-enhanced 包下载到根用户的主目录中,而 vim-minimal 包要从一个更新镜像获取。
[root@echidna ~]# ls *.rpm
vim-common-7.2.411-1.fc12.x86_64.rpm vim-enhanced-7.2.411-1.fc12.x86_64.rpm
[root@echidna ~]# rpm -Uvh *.rpm http://mirrors.usc.edu/pub/linux/distributions\
> /fedora/linux/updates/12/x86_64/vim-minimal-7.2.411-1.fc12.x86_64.rpm
Retrieving http://mirrors.usc.edu/pub/linux/distributions/fedora/linux/updates/12/x86
_64/vim-minimal-7.2.411-1.fc12.x86_64.rpm
Preparing... ########################################### [100%]1:vim-common ########################################### [ 33%]2:vim-enhanced ########################################### [ 67%]3:vim-minimal ########################################### [100%]
3. 卸载 rpm 软件包
使用命令 rpm -e
包名,包名可以包含版本号等信息,但是不可以有后缀 .rpm
,比如卸载软件包 proftpd-1.2.8-1
,可以使用下列格式:
rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd
不可以是下列格式:
rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1
当使用 rpm 删除包时,如果软件包可以删除,不会有任何的输出和提示,但是,如果试图删除其他包需要的包,它不会执行删除操作,您会看到以下的错误消息:
root@echidna ~]# rpm -e gcl-selinux
error: Failed dependencies:gcl-selinux is needed by (installed) gcl-2.6.8-0.7.20100201cvs.fc12.x86_64
这说明这个软件被其他软件需要,不能随便卸载,可以使用选项 --nodeps
强制卸载:
rpm -e --nodeps proftpd-1.2.8-1
4. 安装 .src.rpm 软件包
详见《Linux 如何安装 SRPM 包》
5. 修复被破坏的软件包
RPM 包管理系统通常可以通过选项 -F
修复包,但是,如果删除了包中的重要文件,仅仅进行更新或者使用 yum reinstall
重新安装包依旧无法解决问题,那么可能需要在重新安装之前删除包。对于这种情况,可能希望删除现有的拷贝并重新安装,但是不希望卸载和重新安装依赖它的所有包。为此,在删除包时,可以使用 rpm
命令的 --nodeps
选项绕过依赖关系检查。下面的例子中,删除了 vim-common 中的 /usr/bin/xxd
文件,然后演示如何恢复这个包:
[root@echidna ~]# rm /usr/bin/xxd
rm: remove regular file `/usr/bin/xxd'? y
[root@echidna ~]# # Oops! we needed that file
[root@echidna ~]# rpm -Fvh vim-common-7.2.411-1.fc12.x86_64.rpm
[root@echidna ~]# ls /usr/bin/xxd
ls: cannot access /usr/bin/xxd: No such file or directory
[root@echidna ~]# # Oh! Freshening the package didn't replace the missing file
[root@echidna ~]# rpm -e vim-common
error: Failed dependencies:vim-common = 2:7.2.411-1.fc12 is needed by (installed) vim-enhanced-2:7.2.411-1.f
c12.x86_64
[root@echidna ~]# # Can't remove vim-common because vim-enhanced needs it
[root@echidna ~]# rpm -e --nodeps vim-common
[root@echidna ~]# # Bypassing the dependency check allowed removal
[root@echidna ~]# rpm -Uvh vim-common-7.2.411-1.fc12.x86_64.rpm
Preparing... ########################################### [100%]1:vim-common ########################################### [100%]
[root@echidna ~]# # Update (or install) vim-common again
[root@echidna ~]# ls /usr/bin/xxd
/usr/bin/xxd
[root@echidna ~]# # And /usr/bin/xxd is back
注意,在安装 RPM 时也可以绕过依赖关系检查,但是这通常不是好做法。
(三)执行其他功能
1. 导入公钥数字证书
[root@htlwk0001host mysql]# rpm --import /media/cdrom/RPM-GPG-KEY
2. 从一个 rpm 包运行可执行文件
rpm2cpio package.rpm | cpio --extract --make-directories *bin*
说明:--extract
表示提取;--make-directories
表示按软件包内的文件原有的路径;*bin*
执行名称中含有关键字 bin
的文件,即可执行文件。
3. 如何在不安装的情况下获取 rpm 包中的文件
使用命令工具 rpm2cpio
和 cpio
,对 rpm
包进行提取(包含解包、解压过程)。
rpm2cpio xxx.rpm | cpio -vi
rpm2cpio xxx.rpm | cpio -idmv
rpm2cpio xxx.rpm | cpio --extract --make-directories
说明: 参数 -i
和 --extract
相同,表示提取文件;-d
和 --make-directory
相同,表示根据包中文件原来的路径建立目录;-m
表示保持文件的更新时间;-v
表示指示执行进程。
五、参考文献
线上工具