您当前的位置: 首页 >  linux

liaowenxiong

暂无认证

  • 0浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Linux 命令之 rpm -- RPM 软件包的管理工具

liaowenxiong 发布时间:2021-04-19 10:59:44 ,浏览量:0

文章目录
  • 一、命令介绍
  • 二、语法结构
  • 三、常用选项
    • 用于查询和检查包
    • 用于安装、升级和删除包
    • 用于执行其他功能
  • 四、命令示例
    • (一)查询和检查包
      • 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查询拥有指定文件的套件(即软件包),即查询文件或命令属于哪个软件包-dDocument. 只列出文本文件,本参数需配合 -l 参数使用-c只列出组态配置文件,本参数需配合 -l 参数使用-iInformation. 后面如果跟着软件名,没有后缀 .rpm,可以查看该软件的有关信息,需要配合选项 -q 才能使用-lList. 显示套件(即软件包)的文件列表-pPackage. 查询指定的 RPM 套件档,即查询指定的RPM软件包-qQuery. 表示查询-R显示套件的关联性信息,即显示软件包的依赖关系-sStatus. 显示文件状态,本参数需配合-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的数据库--percentPrint 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 
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 包,ppackage 的首字母。

已经安装过的软件包,使用如下的命令语句:

[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 
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

注:

  1. -R 必须大写,是 requires 的首字母,含义是查询软件包的依赖性。
  2. 如果要查询包文件而不是 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  - 5.7.28-1
- Add License Book, remove COPYING

* 三 1月 24 2018 Balasubramanian Kandasamy  - 5.7.23-1
- Add perl modules for test subpackage

* 三 1月 10 2018 Bjorn Munch  - 5.7.22-1
- No longer need to remove obsoleted mysqltest man pages
(二)安装、升级和删除包 1. 安装软件包
  1. 安装当前目录下的一个 rpm 包,并显示安装相关信息:
[root@linuxcool ~]# rpm -ivh package.rpm 
  1. 按绝对路径安装 rpm 包,并显示安装相关信息:
[root@linuxcool ~]# rpm -ivh  /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm 
  1. 安装一个 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. 升级软件包
  1. 升级指定的软件包,若没有安装,则会直接安装此软件包:
[root@linuxcool ~]# rpm -U package.rpm # 更新一个rpm包但不改变其配置文件
  1. 升级一个确定已经安装的软件包:
[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 包中的文件

使用命令工具 rpm2cpiocpio,对 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 表示指示执行进程。

五、参考文献

线上工具

关注
打赏
1661566967
查看更多评论
立即登录/注册

微信扫码登录

0.0468s