IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 13. 软件包详解rpm包的查找安装升级卸载验证等所有操作 -> 正文阅读

[系统运维]13. 软件包详解rpm包的查找安装升级卸载验证等所有操作

本小节会详细介绍linux中的软件包管理,涉及软件包的定义/安装/卸载/依赖等操作。以及会详细演示rpm这个非常重要命令的使用。


前言

本小节会详细介绍linux中的软件包管理,涉及软件包的定义/安装/卸载/依赖等操作。以及会详细演示rpm这个非常重要命令的使用。


软件包

源码包

源码包是一大堆源代码程序,是由程序员按照特定的格式和语法编写出来的。计算机只能识别机器语言,也就是二进制语言,所以源码包的安装需要通过编译器将程序代码翻译成二进制语言,这个过程叫做编译。

源码包的安装需要把源代码编译为二进制代码,安装时间通常都很长。安装25M左右的源码包,可能需要半小时间到一时间。但常见的二进制包安装,例如微信,几百M的文件,也只需要几分钟。

另外源码包的安装需要人为编译,这个过程很容易报错,可能还需要熟悉程序语言进行排错。

为了解决源码安装的这些问题,在linux中更常见的还是使用二进制包进行安装。

二进制包

源码包成功之后产生的包就是二进制包。二进制包在发布之前就已经完成编译工作,因此用户安装的速度会快很多,且安装报错的几率减小。

目前主流的二进制包管理系统有两大类:
RPM 包管理系统:功能强大,安装、升级、査询和卸载简单方便,很多 Linux 发行版使用的软件安装管理方式,例如 红帽、CentOS、SuSE 等。
DPKG 包管理系统:由 Debian Linux 开发的包管理机制,主要应用在 Debian 和 Ubuntu 系统。
RPM 包管理系统和 DPKG 包管理系统原理大同小异,这一系列课程是在Centos7中做实验,所以以RPM包管理系统为主。

源码包 VS二进制包

源码包一般包含多个文件,为了方便发布,通常会将源码包做打包压缩处理,Linux 中最常用的打包压缩格式为“tar.gz”,因此源码包又被称为 Tarball。
源码包通常包含以下内容:
源代码文件。
配置和检测程序(如 configure 或 config 等)。
软件安装说明和软件说明(如 INSTALL 或 README)。

源码包安装软件的好处:
开源,可以修改源代码。
可自由选择所需的功能。
软件是编译安装,安装完成后更加匹配操作系统。
卸载方便。

源码包安装软件的缺点:
安装时候,参数配置和步骤较多,语法容易写错
编译安装时间比二进制安装要长很多。
编译安装过程容易出错,并且一旦出错,很难解决

二进制(rpm)包安装的优点
rpm管理系统简单,通过常见的命令可实现包的安装、升级、査询和卸载。
安装速度比源码包安装快得多。相比源码包,二进制包是在软件发布时已经进行过编译的软件包,所以安装速度比源码包快得多。

二进制(rpm)包安装的缺点
不能看到源代码。
功能选择不灵活。

依赖性

依赖性。有时在安装软件包 x 时需要先安装 y 和 z,而在安装 z 时需要先安装 a 和 b。这就需要先安装 a 和 b,再安装 y 和 z,最后才能安装 x。安装软件包需要有一定的顺序,但是有时依赖性会非常复杂。

软件包的依赖性 在包的安装和卸载过程中需要重点关注,包之间的依赖关系大致可分为以下 2 种:
树形依赖(A-B-C-D):要想安装软件 A,必须先安装 B,而安装 B 需要先安装 C;解决此类型依赖的方法是从后往前安装,即先安装 D,再安装 C,然后安装 B,最后安装软件 A。
环形依赖(A-B-C-D-A):各个软件安装的依赖关系构成环状。解决此类型依赖的方法是用一条命令同时安装所有软件包,即使用 rpm -ivh A B C D

已上两种依赖关系,都是通过手动安装方式解决,非常繁琐,如果依赖的包特别多,明显不适用。在下一讲中,将学习使用 yum 命令查询、安装、升级和卸载软件包的方法。它可以自动处理软件包之间的依赖性关系,一次性安装所有依赖的软件包,无需一个个安装。

版本要求
例如装gcc 这个软件包的时候,会有如下输出:
[root@prometheus Packages]# rpm -ivh gcc-4.8.5-44.el7.x86_64.rpm
error: Failed dependencies: <— 提示依赖性错误
cpp = 4.8.5-44.el7 is needed by gcc-4.8.5-44.el7.x86_64
glibc-devel >= 2.2.90-12 is needed by gcc-4.8.5-44.el7.x86_64
libmpc.so.3()(64bit) is needed by gcc-4.8.5-44.el7.x86_64
libmpfr.so.4()(64bit) is needed by gcc-4.8.5-44.el7.x86_64
提示要安装 gcc,需要先安装其他包,这就是RPM 包的依赖性。
另外信息中还会明确给出各个依赖软件的版本要求:
">=":表示版本要大于或等于显示版本;
“<=”:表示版本要小于或等于显示版本;
“=”:表示版本要等于显示版本;

下面我们会详细讲解 RPM包的使用,请熟练掌握

RPM包管理系统

RPM包命名规则

RPM 包的命名具有规则,用户通过名称可获取包的版本、适用平台等信息。
RPM包命名格式如下:
包名-版本号-发布次数-发行商-Linux平台-适合的硬件平台-包扩展名
例如:libreport-web-2.1.11-53.el7.centos.x86_64.rpm

选项含义
libreport-web软件包名。
2.1.11包的版本号,版本号的格式通常为主版本号.次版本号.修正号。
53包发布的次数,表示此 包是第几次编程生成的。
el*:软件发行商,el7 表示是由 Red Hat 公司发布,在 RHEL 7.x 和 CentOS 7.x 上使用。
Centos这个软件包适用的平台,其它软件包可能不包含这个选项
x86_64包能够使用的硬件平台,参照下面列表。x86_64代表在64位的操作系统上安装运行

包名和包全名

包名是指版本号之前的字符串。包全名是指带rpm完整字符串的名称。

  1. 例 libreport-web-2.1.11-53.el7.centos.x86_64.rpm
    这个文件它的包名是 libreport-web
    它的包全名是 libreport-web-2.1.11-53.el7.centos.x86_64.rpm。
    注意:包名和包全名,两者是不同的。软件包的安装和升级是需要指定包全名。而软件查询卸载是使用包名。一定要区分开!

  2. 例Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm
    这个文件的包名是Percona-Server-server-56 注意不是Percona-Server-server
    它的包全名是 Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm

[root@zaishu ~]# rpm -qa Percona-Server-server  //没有输出
[root@zaishu ~]# rpm -qa Percona-Server-server-56  
Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64
[root@zaishu ~]# rpm -qi Percona-Server-server-56
Name        : Percona-Server-server-56  //包名
Version     : 5.6.38
Release     : rel83.0.el7
Architecture: x86_64
Install Date: Mon 15 Nov 2021 12:02:23 PM CST
Group       : Applications/Databases
Size        : 92247229
License     : Copyright (c) 2000, 2010, Oracle and/or its affiliates.  All rights reserved.  Use is subject to license terms. Under the GNU General Public License (http://www.gnu.org/licenses/).
Signature   : DSA/SHA1, Fri 08 Dec 2017 05:28:46 PM CST, Key ID 1c4cbdcdcd2efd2a
Source RPM  : Percona-Server-56-5.6.38-rel83.0.el7.src.rpm
Build Date  : Fri 08 Dec 2017 05:27:16 PM CST
Build Host  : os-centos-7-x64-4119.ci.percona.com
Relocations : (not relocatable)
Packager    : Percona MySQL Development Team <mysqldev@percona.com>
Vendor      : Percona, Inc
URL         : http://www.percona.com/
Summary     : Percona Server: a very fast and reliable SQL database server

硬件平台

注意:32位的包可以安装在x86_64中,但64位的包是不能够安装在32位的操作系统中。

平台适用平台信息
i386386 以上计算机都可以安装
i586686 以上计算机都可以安装
i686奔腾 II 以上的计算机都可以安装,对于32位的操作系统目前基本都是这个居多
x86_6464 位 CPU 可以安装
noarch没有硬件限制
例如当前安装的是64位centos,所以安装盘中主要都是x86_64的包
[root@prometheus Packages]# ls *x86_64* | wc -l
2665
还有一些包就是noarch,表示对硬件没有限制
[root@prometheus Packages]# ls *noarch* | wc -l
1405

RPM常见选项

语法可以通过man rpm具体查看,这节只列出常用的一些选项

选项用途
-a查询所有包。
-c只列出包的配置文件,本参数需配合"-l"参数使用。
-d只列出文本文件,本参数需配合"-l"参数使用。
-e<包档>或–erase<包档>删除指定的包。
-f<文件>+查询拥有指定文件的包。
-h或–hash包安装时列出标记。
-i显示包的相关信息。
-i<包档>或–install<包档>安装包。
-l显示包的文件列表。
-p<包档>+指定未安装的包。
-q查询包。
-R显示包的关联性信息。
-s显示文件状态,本参数需配合"-l"参数使用。
-U<包档>或–upgrade<包档>升级指定的包。
-v显示指令执行过程。
-vv详细显示指令执行过程,便于排错。

软件包查找

rpm 命令可用来对 RPM 软件包做查询操作,具体包括:

查询包是否已安装;
查询所有已安装的包;
查看包的详细信息;
查询包的文件列表;
查询文件具体属于哪个包。

rpm -q 查询软件包是否安装

查询包是否安装:
[root@localhost ~]# rpm -q 包名
-q 表示查询,是 query 的首字母。
例如,查看 Linux 系统中是否安装 apache:

[root@prometheus Packages]# rpm -q httpd
httpd-2.4.6-97.el7.centos.2.x86_64

这里使用的是包名,而不是包全名。

rpm -qa:查询所有安装的包

查询 Linux 系统中所有已安装软件包:

[root@zaishu ~]# rpm -qa
glibc-devel-2.17-324.el7_9.x86_64
perl-Filter-1.49-3.el7.x86_64
libcurl-7.29.0-59.el7_9.1.x86_64
readline-devel-6.2-11.el7.x86_64
python-libs-2.7.5-90.el7.x86_64
…省略…

也可以使用管道符查找:

[root@prometheus Packages]# rpm -qa|grep httpd
httpd-2.4.6-97.el7.centos.2.x86_64
httpd-tools-2.4.6-97.el7.centos.2.x86_64

rpm -qi:查询包的详细信息

查询软件包的详细信息,-i 选项表示查询软件信息:
[root@localhost ~]# rpm -qi 包名

[root@zaishu ~]# rpm rpm -qi Percona-Server-client-56
Name        : rpm
Version     : 4.11.3
Release     : 45.el7
Architecture: x86_64
Install Date: Thu 08 Oct 2020 07:57:46 PM CST
Group       : System Environment/Base
Size        : 2622621
License     : GPLv2+
Signature   : RSA/SHA256, Thu 15 Oct 2020 03:00:03 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : rpm-4.11.3-45.el7.src.rpm
Build Date  : Thu 01 Oct 2020 01:30:03 AM CST
Build Host  : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.rpm.org/
Summary     : The RPM package management system
..........
For a description of Percona Server see http://www.percona.com/software/percona-server/

rpm -qip 查看未安装包的详细信息

查询未安装软件包的详细信息,命令格式为:
[root@localhost ~]# rpm -qip 包全名 //-p 表示未安装的软件包。
rpm -qip zziplib-utils-0.13.62-9.el7.x86_64.rpm

[root@prometheus Packages]# rpm -qip  zziplib-0.13.62-12.el7.x86_64.rpm 
Name        : zziplib
Version     : 0.13.62
Release     : 12.el7
Architecture: x86_64
Install Date: (not installed)
Group       : Applications/Archiving
Size        : 216046
License     : LGPLv2+ or MPLv1.1
Signature   : RSA/SHA256, Sat 04 Apr 2020 05:10:34 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : zziplib-0.13.62-12.el7.src.rpm
Build Date  : Wed 01 Apr 2020 01:04:24 PM CST
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://zziplib.sourceforge.net/
Summary     : Lightweight library to easily extract data from zip files
Description :
The zziplib library is intentionally lightweight, it offers the ability to
easily extract data from files archived in a single zip file. Applications
can bundle files into a single zip archive and access them. The implementation
is based only on the (free) subset of compression with the zlib algorithm
which is actually used by the zip/unzip tools.

rpm -ql:查询已安装包 产生的文件列表

rpm包安装后采用默认的路径,安装后的文件会分类安放在不同目录下。使用 rpm 命令可以查询到包安装后产生的所有文件和路径:
[root@localhost ~]# rpm -ql 包名
-l :列出软件包所有文件的安装目录。

例如安装apache后,查询这个包中所有文件和位置:

[root@zaishu~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
…省略部分输出…

rpm -qlp:查询未安装包 安装后产生的文件列表

rpm 命令还可以查询 未安装的包 所含有的文件以及安装后的路径:
-p :未安装的软件包。
例如查看尚未安装的bind包中的所有文件及安装后的位置,可以执行如下命令:

[root@prometheus Packages]# rpm -qlp bind-9.11.4-26.P2.el7.x86_64.rpm 
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
…省略部分输出…

rpm -qf 查询文件系统属于哪个包

支持反向查询,用于查询文件属于哪个包,特别是在查询命令或者卸载命令的时候,这个参数用的比较频繁:
[root@zaishu~]# rpm -qf 系统文件名
-f 选项的含义是查询系统文件所属哪个软件包,是 file 的首字母。

例 ls 命令所属的包:

[root@zaishu ~]# which ls
alias ls='ls --color=auto'
	/usr/bin/ls
[root@zaishu ~]# rpm -qf /usr/bin/ls
coreutils-8.22-24.el7.x86_64
以后想删掉ls这条命令的时候,就可以通过卸载coreutils-8.22-24.el7.x86_64来实现

rpm -qR:查询软件包的依赖关系

安装包的时候需考虑与其他包的依赖关系。rpm -qR 用来查询已安装包的依赖关系,该命令的格式为:
[root@localhost ~]# rpm -qR 包名
-R(大写)选项的含义是查询软件包的依赖性,是 requires 的首字母。
例如,查询 apache 软件包的依赖性,可执行以下命令:

[root@zaishu ~]# rpm -qR httpd
/bin/bash
/bin/sh
/etc/mime.types
/usr/sbin/useradd
apr-util-ldap
chkconfig
config(httpd) = 2.4.6-97.el7.centos.2
httpd-tods = 2.4.6-97.el7.centos.2
…省略部分输出…

rpm -qRp:查询未安装包的依赖关系

同样,在此命令的基础上增加 -p 选项,即可实现查找未安装软件包的依赖性。
例如,bind 软件包尚未安装查看此软件包的依赖性可执行如下命令:

[root@zaishu Packages]# rpm -qRp bind-9.9.4-72.el7.x86_64.rpm
/bin/bash
/bin/sh
bind-libs = 32:9.8.2-0.10.rc1.el6
chkconfig
chkconfig
config(bind) = 32:9.8.2-0.10.rc1.el6
grep
libbind9.so.80
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)

RPM安装

包的安装

rpm -ivh 包全名 ;
注意: 这儿一定要使用包全名,不是包名。

rpm -ivh 包全名
-i:安装(install);
-v:显示更详细的信息(verbose);
-h:打印 #,显示安装进度(hash);

例:安装 Percona-Server-shared软件包

[root@zaishu ~]# rpm -ivh Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm
warning: Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:Percona-Server-shared-56-5.6.38-r################################# [100%]

第一个 100% 表示完成了准备工作;第二个100%表示安装完成。对于已经安装的包,只会有准备的那个100%

[root@zaishu ~]# rpm -ivh Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm
warning: Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing...                          ################################# [100%]
	package Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64 is already installed

例: 安装多个软件包

[root@zaishu ~]# rpm -ivh Percona-Server-client-56-5.6.38-rel83.0.el7.x86_64.rpm  Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm 
warning: Percona-Server-client-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:Percona-Server-client-56-5.6.38-r################################# [ 50%]
   2:Percona-Server-server-56-5.6.38-r################################# [100%]

其他参数选项

如果还有其他安装要求(比如强制安装某软件而不管它是否有依赖性),可以通过以下选项进行调整:

选项含义
-nodeps不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。
-replacefiles替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报"某个文件已经存在"的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。
-replacepkgs替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。
-force:强制安装。不管是否已经安装,都重新安装。也就是 -replacefiles 和 -replacepkgs 的综合。
-test测试安装。不会实际安装,只是检测一下依赖性。
-prefix指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。

例 -nodeps: 不检测依赖

可以看到当正常安装Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm的时候,提示需要其他两个包,这就是依赖性,需要先安装Percona-Server-client-56和Percona-Server-shared-56才能安装Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm。
[root@zaishu ~]# rpm -ivh Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm 
warning: Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
error: Failed dependencies:
	Percona-Server-client-56 is needed by Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64
	Percona-Server-shared-56 is needed by Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64
如果加上 -nodeps ,表示不检查依赖性,直接安装。实际工作当中,是不建议这样安装,因为即使安装成功,也不代表这个包能够正常使用。
[root@zaishu ~]# rpm -ivh Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm  --nodeps
warning: Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:Percona-Server-server-56-5.6.38-r################################# [100%]

例 --force:强制安装

[root@zaishu ~]# rpm -ivh Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm 
warning: Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:Percona-Server-shared-56-5.6.38-r################################# [100%]

这个时候再安装,会提示已经安装

[root@zaishu ~]# rpm -ivh Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm 
warning: Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing...                          ################################# [100%]
	package Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64 is already installed

加上–force 表示会强制安装,替换软件包和文件

[root@zaishu ~]# rpm -ivh Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm --force
warning: Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:Percona-Server-shared-56-5.6.38-r################################# [100%]

RPM包安装路径

RPM 包安装后的默认路径列表。所有安装文件会按照下面分类放置在不同的目录之中。

安装路径含 义
/etc/配置文件安装目录
/usr/bin/可执行的命令安装目录
/usr/lib/程序所使用的函数库保存位置
/usr/share/doc/基本的软件使用手册保存位置
/usr/share/man/帮助文件保存位置

RPM 包的默认安装路径通过命令查询的。
RPM 包可以人为指定安装路径,但不推荐。因为手工指定的路径,系统中用来查询安装路径的命令无法自动识别使用。

[root@zaishu ~]# rpm -ql Percona-Server-server-56
/etc/logrotate.d/mysql
/usr/bin/innochecksum
....
/usr/bin/resolveip
/usr/lib/systemd/system/mysqld.service
..
/usr/lib64/mysql/plugin/adt_null.so
...
/usr/lib64/mysql/plugin/validate_password.so
/usr/sbin/mysqld
...
/usr/sbin/rcmysql
/usr/share/doc/Percona-Server-server-56-5.6.38
...
/usr/share/percona-server/ukrainian/errmsg.sys
....

注意: 后面在讲解源码包编译安装方式的时候,会手工指定安装路径。但二进制包不要画蛇添足时指定安装路径。

RPM包的升级

语法:
[root@localhost ~]# rpm -Uvh 包全名
-U(:如果该软件没安装过则直接安装;若已有安装则升级至最新版本。
[root@localhost ~]# rpm -Fvh 包全名
-F:如果该软件没有安装,不会安装,必须有较低版本才能升级。

RPM包的卸载

语法:
[root@localhost ~]# rpm -e 包名 [-nocteps]
-e : erase 首字母,表示卸载。
-nocteps : 不检查依赖直接卸载。不建议使用~

rpm -e 卸载包

[root@zaishu ~]# rpm -e Percona-Server-server-56

依赖性

RPM 软件包的卸载要考虑包之间的依赖性。例如,我们先安装的 httpd 软件包,后安装 httpd 的功能模块 mod_ssl 包,那么在卸载时,就必须先卸载 mod_ssl,然后卸载 httpd,否则会报错。
软件包卸载和拆除大楼是一样的,本来先盖的 2 楼,后盖的 3 楼,那么拆楼时一定要先拆除 3 楼。
如果卸载 RPM 软件不考虑依赖性,执行卸载命令会包依赖性错误,例如:

[root@node1 Packages]# rpm -e httpd
error: Failed dependencies:
	httpd = 2.4.6-88.el7.centos is needed by (installed) httpd-devel-2.4.6-88.el7.centos.x86_64
	httpd = 2.4.6-88.el7.centos is needed by (installed) httpd-manual-2.4.6-88.el7.centos.noarch

[root@node1 Packages]# rpm -e httpd-devel
[root@node1 Packages]# rpm -e httpd-manual
[root@node1 Packages]# rpm -e httpd
[root@node1 Packages]# rpm -qa|grep httpd
httpd-tools-2.4.6-88.el7.centos.x86_64
[root@node1 Packages]# rpm -e httpd-tools

卸载命令

当想删除一条命令的时候,可能更多是想将这个命令对应的软件进行卸载,彻底删除这条命令。

查找命令的绝对路径
[root@node1 ~]# which samba-regedit   
/usr/bin/samba-regedit
查找这条命令对应的包,需要提供绝对路径
[root@node1 ~]# rpm -qf /usr/bin/samba-regedit 
samba-client-4.8.3-4.el7.x86_64
卸载包
[root@node1 ~]# rpm -e samba-client

RPM包验证和数字证书

系统中有非常多的RPM 包,每个包安装后又有大量的文件。因此这些包或者文件都有可能被修改或删除。为了能及时发现文件做了变更或者被人恶意篡改文件等问题,系统提供了两种检测方式:

  1. 包校验:将已安装文件和 /var/lib/rpm/ 下的的数据库进行比较,来确定文件是否被修改。
  2. 包数字证书校验:用来校验 包本身是否被修改。

Linux RPM 包校验

包校验用来判断已安装的软件包(或文件)是否被修改,此方式可使用的命令格式分为以下 3 种。

[root@zaishu~]# rpm -Va
-Va 选项表示校验系统中已安装的所有软件包。
[root@zaishu~]# rpm -V 已安装的包名
-V 选项表示校验指定 RPM 包中的文件,是 verity 的首字母。
[root@zaishu~]# rpm -Vf 系统文件名
-Vf 选项表示校验某个系统文件是否被修改。

例1. 对安装后的文件做修改
apache 软件包中所有的安装文件是否被修改,可执行如下命令:

当不做任何变更的时候,如果没有输出表示没有做修改
[root@localhost -]# rpm -V httpd  

apache 的配置文件 /etc/httpd/conf/httpd.conf 进修改后;再验证这个包

[root@node1 conf]# rpm -V httpd
S.5....T.  c /etc/httpd/conf/httpd.conf

可以看到,结果显示httpd.conf这个文件修改过。输出的信息可分为以下 3 部分:分别是验证信息,文件类型,文件名称。

第一列是验证信息
最前面的 8 个字符(S.5…T)都属于验证信息,每列含义如下:

第一列:S.5…T.
S文件大小是否改变。 出现S表示文件大小改变了
M文件的类型或文件的权限(rwx)是否改变。
5文件MD5校验和是否改变(可以看成文件内容是否改变)。
D设备的主从代码是否改变。
L文件路径是否改变。
U文件的属主(所有者)是否改变。
G文件的属组是否改变。
T文件的修改时间是否改变。
.若相关项没发生改变,用 . 表示。

通过验证信息可以知道这个文件的大小和md5码,mtime都变更过。

第二列是文件类型
分为以下几类:

字符含义
c配置文件(configuration file)。
d普通文档(documentation)。
g"鬼"文件(ghost file),很少见,就是该文件不应该被这个 RPM 包包含。
l授权文件(license file)。
r描述文件(read me)。

第三列是文件名称
被修改文件所在绝对路径和文件名。

因此S.5…T. c /etc/httpd/conf/httpd.conf 表达的完整含义是:配置文件 httpd.conf 的大小、内容、修改时间被人为修改过。
注意:通常修改配置文件是正常的情况,需要留意是那些被恶意修改过文件。

Linux RPM数字证书验证

之前方法是验证已经安装包后相关文件信息。如果在安装前,rpm包已经被修改,不是厂家提供的包,这个时候需要使用 RPM 数字证书来验证。
数字证书,又称数字签名,由软件开发商直接发布。Linux 系统安装数字证书后,若 RPM 包做了修改,此包携带的数字证书也会改变,将无法与系统匹配,软件无法安装。
可以将数字证书想象成自己的签名,是不能被模仿的(厂商的数字证书是唯一的)
使用数字证书验证 RPM 包的方法具有如下 2 个特点:

  1. 需要找到原厂的公钥文件,才能进行安装。
  2. 安装 RPM 包会提取包中证书信息,然后安装的原厂证书进行验证。验证通过,允许安装;验证失败,不允许安装并发出警告。

#系统中的数字证书位置

[root@node1 conf]# ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 
-rw-r--r--. 1 root root 1690 Nov 23  2018 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

安装数字证书

[root@node1 conf]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
--import表示导入数字证书
数字证书安装完成后,可使用如下命令进行验证:
 [root@node1 conf]# rpm -qa|grep gpg-pubkey**
gpg-pubkey-f4a80eb5-53a7ff4b

查询数字证书
数字证书也是一个包,可以用 rpm 命令查询数字证书的详细信息:

[root@node1 conf]# rpm -qi  gpg-pubkey-f4a80eb5-53a7ff4b
#查询数字证书包的详细信息
...
-----END PGP PUBLIC KEY BLOCK----

卸载数字证书
使用 -e 选项:

[root@node1 conf]# rpm -e  gpg-pubkey-f4a80eb5-53a7ff4b
虽然数字证书可以手动卸载,但不推荐大家将其卸载。

安装数字证书后。在系统上安装 RPM 包时,系统会自动验证包的数字证书,验证通过则可以安装,
反之将无法安装(系统会报错)。

RPM包的数据库

系统中安装的所有RPM包,信息会保存到 RPM 数据库中,用户在使用 rpm 命令对执行查询、安装和卸载等操作的时候,会通过这个数据库中得到相关信息。

重建RPM包的数据库

在实际操作过程中有可能有一些操作导致数据库损坏,例如升级过程强行退出、安装时候意外中断,甚至误删除数据库等操作,都可能导致数据库出现故障。 后续再使用rpm命令的时候,由于数据库出现故障,请求无法执行。这时需要重建数据库,操作步骤如下:

删除已损坏的数据库,执行如下命令:

[root@zaishu ~]# ls /var/lib/rpm/
Basenames     __db.001      __db.003      Dirnames      Installtid    Obsoletename  Providename   .rpm.lock     Sigmd5        
Conflictname  __db.002      .dbenv.lock   Group         Name          Packages      Requirename   Sha1header    Triggername   
[root@zaishu ~]# rm -rf /var/lib/rpm/__db* //删除已损坏的数据库
[root@zaishu ~]# ls -l /var/lib/rpm/__db*
ls: cannot access /var/lib/rpm/__db*: No such file or directory

重建 RPM 数据库,执行如下命令:

[root@zaishu ~]# rpm -rebuilddb  //这一步花费一定时间。
[root@zaishu ~]#  ls -l /var/lib/rpm/__db*
-rw-r--r-- 1 root root  270336 Nov 15 15:44 /var/lib/rpm/__db.001
-rw-r--r-- 1 root root   81920 Nov 15 15:44 /var/lib/rpm/__db.002
-rw-r--r-- 1 root root 1318912 Nov 15 15:44 /var/lib/rpm/__db.003

人为修改数据库

为了不想让管理员 通过包校验检查出软件异常,进而手工修改数据库。对于这种情况,可以按照以下步骤对文件进行检测:

对于要校验的文件或命令,找到它属于哪个软件包,如下命令所示:

[root@node1 ~]# rpm -qf /etc/pam.d/samba
samba-4.8.3-4.el7.x86_64

使用 -dump 选项查看每个文件的信息,使用 grep 命令提取对应文件信息:

rpm -ql --dump samba|grep /etc/pam.d/samba,输出结果中 177表示 smb 文件最初的字符数。
adf2c510d4218ac0b3f72898cfe4097c0d1c9836da2b0237929af6bf4619ea84表示 文件的 MD5 校验值。
0644 root root表示文件权限及所有者、所属组。

查看文件,通过对比文件大小,所有人、所属组、权限、MD5 校验值等数据,判断文件是否改动过:

[root@node1 ~]# md5sum /etc/pam.d/samba 
c8d4d43f8a3f06190fcf32ff7e8b87b5  /etc/pam.d/samba

以上校验结果显示,系统的 /etc/rc.d/init.d/smb 文件的信息和通过 rpm-ql-dump Samba 命令获取的信息不一致,因此可以断定此文件没有被更改过。


总结

本小节会详细介绍linux中的软件包管理,涉及软件包的定义/安装/卸载/依赖等操作。以及会详细演示rpm这个非常重要命令的使用。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 19:14:17  更:2021-11-16 19:16:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:32:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码