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

文章目录

  • 一、命令介绍
  • 二、语法结构
  • 三、常用选项
    • 用于查询和检查包
    • 用于安装、升级和删除包
    • 用于执行其他功能
  • 四、命令示例
    • (一)查询和检查包
      • 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 <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 包,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 <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

注:

  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 <bjorn.munch@oracle.com> - 5.7.28-1
- Add License Book, remove COPYING* 三 124 2018 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.23-1
- Add perl modules for test subpackage* 三 110 2018 Bjorn Munch <bjorn.munch@oracle.com> - 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 表示指示执行进程。

五、参考文献

线上工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react核心虚拟dom_使用虚拟时间测试基于时间的React堆核心流

react核心虚拟domReactor Core实现了Reactive Streams规范&#xff0c;并处理了&#xff08;可能无限的&#xff09;数据流。 如果您感兴趣&#xff0c;请查看它提供的出色文档 。 在这里&#xff0c;我假设对Reactor Core库的Flux和Mono类型有一些基本的了解&#xff0c;并且将…

图书管理系统python语言-Python简易版图书管理系统

本文实例为大家分享了python图书管理系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 """ 图书管理系统 """ import random # books{书名:剩余数量, 书名:剩余数量} import time books {"防脱发指南": 5, "颈椎康…

docker 打包mysql_基于docker部署mysql的数据持久化问题

本人最近在使用docker部署mysql时&#xff0c;在持久化mysql数据时遇到了一个有趣的问题&#xff0c;将排查过程及思考记录在这里&#xff0c;以备后查。先简单描述下我遇到的问题&#xff1a;在mysql容器中创建了两个数据库&#xff0c;然后使用docker commit想要保存容器的修…

Linux 命令之 ls -- 列出指定目录下的内容

文章目录一、命令介绍二、语法格式三、常用选项四、参考示例&#xff08;一&#xff09;显示工作目录下&#xff08;当前目录&#xff09;所有的文件和目录&#xff08;二&#xff09;显示工作目录下所有的文件和目录&#xff08;三&#xff09;显示文件的详细信息&#xff0c;…

kotlin dsl_Spring Webflux – Kotlin DSL –实现的演练

kotlin dsl在以前的博客文章中&#xff0c;我描述了Spring Web Framework中的响应式编程支持Spring Webflux如何使用基于Kotlin的DSL使用户能够以非常直观的方式描述路由。 在这里&#xff0c;我想探索一些底层实现。 描述一组端点的样本DSL看起来像这样&#xff1a; package…

cad调了比例因子没反应_「室内设计」大神们都在用的9个CAD制图技巧,你会用几个?...

1、快捷特性面板如何调取&#xff1f;2、 如何快速恢复上一次删除物体&#xff1f;3、 如何快速关闭监视注释器&#xff1f;4、如何快速处理重复碎线&#xff1f;5、如何解决虚线在模型空间和布局空间显示不一致的问题&#xff1f;6、 如何快速更改图块名称&#xff1f;7、 PL线…

ubuntu 12下的apache+php+mysql_老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略

一、首先安装MySql&#xff1a;对于MySql来讲在整个过程中是相对独立的安装&#xff0c;并且我的ubuntu在以前做开发的时候就已经安装了MySql&#xff0c;所以以下只给出安装步骤&#xff1a;1、安装MySql的服务&#xff1a;sudo apt-get install mysql-server要注意的是安装过…

Linux 命令之 mv -- 移动文件/重命名文件

文章目录命令介绍语法格式常用选项命令示例&#xff08;一&#xff09;文件重命名&#xff08;二&#xff09;目录重命名&#xff08;三&#xff09;移动目录&#xff08;四&#xff09;移动目录且重命名&#xff08;五&#xff09;将一个目录下的内容移动到另外一个目录下&…

jax-rs jax-ws_迟来总比没有好:SSE或服务器发送的事件现在已在JAX-RS中

jax-rs jax-ws服务器发送的事件 &#xff08;或简称为SSE &#xff09;是非常有用的协议&#xff0c;它允许服务器通过HTTP将数据推送到客户端。 这是我们的Web浏览器支持的年龄&#xff0c;但是令人惊讶的是&#xff0c; JAX-RS规范在很长一段时间内都忽略了这一点。 尽管Jers…

根据录入的计算公式计算_小规模纳税人增值税计算公式是什么,什么人能被称为小规模纳税人?- 理财技巧...

摘要&#xff1a; 想必大家都知道小规模纳税人在增值税的缴纳上能够享受到不少的优惠措施和政策&#xff0c;最终可以少交不少钱&#xff01;那么什么人能被称为小规模纳税人呢&#xff1f;小规模纳税人增值税计算公式又是什么呢&#xff1f;下面赢家财富网就带大家详细了解一下…

Linux 命令之 chmod -- 改变文件或目录权限

文章目录一、命令介绍二、语法格式三、常用选项四、权限表达式&#xff08;一&#xff09;采用权限字母和操作符表达式&#xff08;二&#xff09;采用权限数字表达式五、参考示例&#xff08;一&#xff09;为拥有者、所属群组以及其他人添加关于directory1的读、写和执行权限…

12章总结

一.集合类概述 java.util包中提供了一些集合类&#xff0c;这些集合类又被称为容器。 集合类与数组的不同之处&#xff1a; 数组的长度是固定的&#xff0c;集合的长度是可变的&#xff1a;数组用来存放基本类型的数据&#xff0c;集合用来存放对象的引用。 常…

java亮剑_黄金矿工3-太空版

快速搜索机型:诺基亚 N70系列(176208)7610 3230 6600 6260 6620 6630 6670 6680 6681 6682 N70 N72 ;松下: X700 X800 ;联想: P930诺基亚 N73系列(240320)N73 5320 5320XM 5320di_XM 5630XM 5700 5700XM 5710XM 5730XM 6110 6110N 6120 6120C 6120ci 6121 6122C 6124C 6210S 62…

怎么知道跟交换机互联的交换机_怎么选择POE交换机

工作的呢&#xff1f;48V供电的就是标准PoE吗&#xff1f;下面我们简单讲解一下标准PoE和MCU PoE交换机&#xff08;单片机&#xff09;及非标PoE设备是怎么工作的。标准PoE和MCU PoE交换机&#xff08;单片机&#xff09;以及非标准PoE产品定义首先我们来看一下什么是标准PoE、…

并发查询parallel_惯用并发:flatMap()与parallel()– RxJava常见问题解答

并发查询parallel简单&#xff0c;有效和安全的并发是RxJava的设计原则之一。 然而&#xff0c;具有讽刺意味的是&#xff0c;它可能是该库中最容易被误解的方面之一。 让我们举一个简单的例子&#xff1a;假设我们有一堆UUID并且对于每个UUID &#xff0c;我们必须执行一组任务…

java正则表达式 匹配()_学习Java正则表达式(匹配、替换、查找)

import java.util.ArrayList;import java.util.regex.Matcher;import java.util.regex.Pattern;public class test {public static void main(String[] args) {getStrings(); //用正则表达式获取指定字符串内容中的指定内容System.out.println("********************"…

Linux 命令之 chown -- 用来变更文件或目录的拥有者或所属群组

命令介绍 Linux/Unix 属于多用户多任务操作系统&#xff0c;所有的文件皆有拥有者。利用 chown 命令可以将指定文件的拥有者改为指定的用户或组&#xff0c;用户可以是用户名或者用户ID&#xff0c;组可以是组名或者组ID&#xff0c;文件是以空格分开的要改变权限的文件列表&a…

在excel中如何筛选重复数据_Excel中12招筛选使用大全,小白也能秒变高手

【温馨提示】亲爱的朋友&#xff0c;阅读之前请您点击【关注】&#xff0c;您的支持将是我最大的动力&#xff01;在日常使用Excel处理数据时&#xff0c;相信小伙伴们对于筛选功能已经是不陌生了&#xff0c;Excel筛选功能可以快速有效的帮助我们处理大量的数据&#xff0c;将…

静态内部类实现mysql连接_Java - 静态内部类

Java语言允许在类中再定义类&#xff0c;这种在其它类内部定义的类就叫内部类。内部类又分为&#xff1a;常规内部类、局部内部类、匿名内部类和静态嵌套类四种。1、静态内部类定义静态内部类&#xff0c;定义在类中&#xff0c;任何方法外&#xff0c;用static定义&#xff1b…

Linux 命令之 ll -- 列出当前文件或目录的详细信息

文章目录命令介绍常用选项参考示例&#xff08;一&#xff09;查看当前目录下所有文件的详细信息&#xff0c;且按创建时间排序&#xff08;二&#xff09;按时间倒序&#xff0c;分页排列文件&#xff08;三&#xff09;查看某个目录的详细信息&#xff08;四&#xff09;查看…