RPM软件包管理与使用

一、分类
1.源码包------编译安装
        源码包安装需要先将源码编译成计算机可以识别的二进制文件。因此安装时间比rpm二进制包时间长
2. 二进制包是 Linux 下默认的软件安装包,因此二进制包又被称为默认安装软件包。目前主要有以下 2 大主流的二进制包管理系统:
  • RPM 包管理系统:功能强大,安装、升级、査询和卸载非常简单方便,因此很多 Linux 发行版都默认使用此机制作为软件安装的管理方式,例如 Fedora、CentOS、SuSE 等。
  • DPKG 包管理系统:由 Debian Linux 所开发的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理,主要应用在 Debian 和 Ubuntu 中。

源码包 VS RPM二进制包

源码包一般包含多个文件,为了方便发布,通常会将源码包做打包压缩处理,Linux 中最常用的打包压缩格式为“tar.gz”,因此源码包又被称为 Tarball。
Tarball是Linux系统的一款打包工具,可以对源码包进行打包压缩处理
源码包需要我们自己去软件官方网站进行下载,包中通常包含以下内容:
  • 源代码文件。
  • 配置和检测程序(如 configure 或 config 等)。
  • 软件安装说明和软件说明(如 INSTALL 或 README)。
 
总的来说,使用源码包安装软件具有以下几点好处:
  • 开源。如果你有足够的能力,则可以修改源代码。
  • 可以自由选择所需的功能。
  • 因为软件是编译安装的,所以更加适合自己的系统,更加稳定,效率也更高。
  • 卸载方便。
 
但同时,使用源码包安装软件也有几点不足:
  • 安装过程步骤较多,尤其是在安装较大的软件集合时(如 LAMP 环境搭建),容易出现拼写错误。
  • 编译时间较长,所以安装时间比二进制安装要长。
  • 因为软件是编译安装的,所以在安装过程中一旦报错,新手很难解决。
 
相比源码包,二进制包是在软件发布时已经进行过编译的软件包,所以安装速度比源码包快得多(和 Windows 下软件安装速度相当)。也正是因为已经进行通译,大家无法看到软件的源代码。
 
使用 RMP 包安装软件具有以下 2 点好处:
  1. 包管理系统简单,只通过几个命令就可以实现包的安装、升级、査询和卸载。
  2. 安装速度比源码包安装快得多。
 
使用 RMP 包安装软件有如下不足:
  • 经过编译,不能在看到源代码。
  • 功能选择不如源码包灵活。
  • 依赖性。有时我们会发现,在安装软件包 a 时需要先安装 b 和 c,而在安装 b 时需要先安装 d 和 e。这就需要先安装 d 和 e,再安装 b 和 c,最后才能安装 a。比如,我买了一个漂亮的灯具,打算安装在客厅里,可是在安装灯具之前,客厅需要有顶棚,并且顶棚需要刷好油漆。安装软件和装修及其类似,需要有一定的顺序,但是有时依赖性会非常强。
二、Linux RPM包统一命名规则
RPM 二进制包命名的一般格式如下:
 
包名-版本号-发布次数-发行商-Linux平台-适合的硬件平台-包扩展名
 
例如,RPM 包的名称是httpd-2.2.15-15.el6.centos.1.i686.rpm,其中:
    • httped:软件包名。这里需要注意,httped 是包名,而 httpd-2.2.15-15.el6.centos.1.i686.rpm 通常称为包全名,包名和包全名是不同的,在某些 Linux 命令中,有些命令(如包的安装和升级)使用的是包全名,而有些命令(包的查询和卸载)使用的是包名,一不小心就会弄错。
    • 2.2.15:包的版本号,版本号的格式通常为主版本号.次版本号.修正号。
    • 15:二进制包发布的次数,表示此 RPM 包是第几次编程生成的。
    • el*:软件发行商,el6 表示此包是由 Red Hat 公司发布,适合在 RHEL 6.x (Red Hat Enterprise Unux) 和 CentOS 6.x 上使用。
    • centos:表示此包适用于 CentOS 系统。
    • i686:表示此包使用的硬件平台,目前的 RPM 包支持的平台如表 1 所示:
       
平台名称
适用平台信息
i386
386 以上的计算机都可以安装
i586
686 以上的计算机都可以安装
i686
奔腾 II 以上的计算机都可以安装,目前所有的 CPU 是奔腾 II 以上的,所以这个软件版本居多
x86_64
64 位 CPU 可以安装
noarch
没有硬件限制

三、linux RPM包安装、卸载和升级(rpm命令)

  • rpm:RPM 包的扩展名,表明这是编译好的二进制包,可以使用 rpm 命令直接安装。此外,还有以 src.rpm 作为扩展名的 RPM 包,这表明是源代码包,需要安装生成源码,然后对其编译并生成 rpm 格式的包,最后才能使用 rpm 命令进行安装。
通常情况下,RPM 包采用系统默认的安装路径,所有安装文件会按照类别分散安装到表 1 所示的目录中。
安装路径
含 义
/etc/
配置文件安装目录
/usr/bin/
可执行的命令安装目录
/usr/lib/
程序所使用的函数库保存位置
/usr/share/doc/
基本的软件使用手册保存位置
/usr/share/man/
帮助文件保存位置
 
RPM 包的默认安装路径是可以通过命令查询的。
 
除此之外,RPM 包也支持手动指定安装路径,但此方式并不推荐。因为一旦手动指定安装路径,所有的安装文件会集中安装到指定位置,且系统中用来查询安装路径的命令也无法使用(需要进行手工配置才能被系统识别),得不偿失。
 
与 RPM 包不同,源码包的安装通常采用手动指定安装路径(习惯安装到 /usr/local/ 中)的方式。既然安装路径不同,同一 apache 程序的源码包和 RPM 包就可以安装到一台 Linux 服务器上(但同一时间只能开启一个,因为它们需要占用同一个 80 端口)
 
1.软件包安装: [root@localhost ~]# rpm -ivh 包全名
此命令中各选项参数的含义为:
  • -i:安装(install);
  • -v:显示更详细的信息(verbose);
  • -h:打印 #,显示安装进度(hash);
注意,直到出现两个 100% 才是真正的安装成功,第一个 100% 仅表示完成了安装准备工作。
此命令还可以一次性安装多个软件包,仅需将包全名用空格分开即可,如下所示:
[root@localhost ~]# rpm -ivh a.rpm b.rpm c.rpm
2.安装完成后查询软件包是否安装
rpm -q 软件包名    查询当前系统中是否安装此软件包
rpm -qa             查询系统中所有已经安装的软件包
3.软件包卸载
rpm -e 包全名
 
强制安装:rpm -ivh dhcp-4..1.-38.P1.el6.centos.x86_64.rpm --force    用于已安装软件包的更新升级
 
软件包删除---忽略依赖性删除
 
安装有依赖性的软件包时,也需要先安装软件包需要的软件包  例如安装dhclient需要先安装dhcp-common然后再安装dhclient
如果还有其他安装要求(比如强制安装某软件而不管它是否有依赖性),可以通过以下选项进行调整:
  • -nodeps:不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。
  • -replacefiles:替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报"某个文件已经存在"的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。
  • -replacepkgs:替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。
  • -force:强制安装。不管是否已经安装,都重新安装。也就是 -replacefiles 和 -replacepkgs 的综合。
  • -test:测试安装。不会实际安装,只是检测一下依赖性。
  • -prefix:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。
apache 服务安装完成后,可以尝试启动:
[root@localhost ~]# service 服务名 start|stop|restart|status
各参数含义:
  • start:启动服务;
  • stop:停止服务;
  • restart:重启服务;
  • status: 查看服务状态;
 
例如:
[root@localhost ~]# service httpd start #启动apache服务
 
服务启动后,可以查看端口号 80 是否出现。命令如下:
[root@localhost ~]# netstat -tlun | grep 80
tcp 0 0 :::80:::* LISTEN
也可以在浏览器中输入 Linux 服务器的 IP 地址,访问这个 apache 服务器。目前在 apache 中没有建立任何网页,所以看到的只是测试页
 

RPM包的升级

使用如下命令即可实现 RPM 包的升级:
[root@localhost ~]# rpm -Uvh 包全名
-U(大写)选项的含义是:如果该软件没安装过则直接安装;若没安装则升级至最新版本。
 
[root@localhost ~]# rpm -Fvh 包全名
-F(大写)选项的含义是:如果该软件没有安装,则不会安装,必须安装有较低版本才能升级。
 
 
安装rpm包的路径   本地路径安装    网络安装http://mirror.centos.org/(网络上下载后再安装)
cat /etc/redhat-release 查看centos的版本号,在网上找到相应的yum源安装包
 
hostname  查看主机名
hostname 主机名    临时修改主机名
vim /etc/sysconfig/network    永久修改主机名
 
ping  www.baidu.com    时会先去本地 /etc/hosts 文件解析  www.baidu.com  地址,有的话直接用,没有的话再去 /etc/resolv.conf文件找对应的DNS服务器
 
 
rpm -q 包名        查询软件包是否安装
rpm -qa              查询系统中所有安装的软件包
rpm-qi 包名        查询软件包的详细信息
rpm -ql 包名         查询软件包的文件安装列表
[root@localhost ~]# rpm -qlp 包全名
-p 选项表示查询未安装的软件包信息,是 package 的首字母。
 
注意,由于软件包还未安装,因此需要使用“绝对路径+包全名”的方式才能确定包。
 
比如,我们想查看 bing 软件包(未安装,绝对路径为:/mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm)中的所有文件及各自打算安装的位置,可以执行如下命令:

 

[root@localhost ~]# rpm -qlp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.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 文件列表        查询文件属于那个软件包系统
使用 rpm 命令安装 RPM 包,需考虑与其他 RPM 包的依赖关系。rpm -qR 命令就用来查询某已安装软件包依赖的其他包,该命令的格式为:
[root@localhost ~]# rpm -qR 包名
-R(大写)选项的含义是查询软件包的依赖性,是 requires 的首字母。
 
例如,查询 apache 软件包的依赖性,可执行以下命令:

 

[root@localhost ~]# rpm -qR httpd
/bin/bash
/bin/sh
/etc/mime.types
/usr/sbin/useradd
apr-util-ldap
chkconfig
config(httpd) = 2.2.15-15.el6.centos.1
httpd-tods = 2.2.15-15.el6.centos.1
initscripts >= 8.36
同样,在此命令的基础上增加 -p 选项,即可实现查找未安装软件包的依赖性。
 
例如,bind 软件包尚未安装(绝对路径为: /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm),查看此软件包的依赖性可执行如下命令:

 

[root@localhost ~]# rpm -qRp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.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)
注意,这里使用的也是“绝对路径+包全名”的方式。

Linux RPM包验证和数字证书(数字签名)

执行 rpm -qa 命令可以看到,Linux 系统中装有大量的 RPM 包,且每个包都含有大量的安装文件。因此,为了能够及时发现文件误删、误修改文件数据、恶意篡改文件内容等问题,Linux 提供了以下两种监控(检测)方式:
  • RPM 包校验:其实就是将已安装文件和 /var/lib/rpm/ 目录下的数据库内容进行比较,确定文件内容是否被修改。
  • RPM 包数字证书校验:用来校验 RPM 包本身是否被修改。

Linux RPM 包校验

RPM 包校验可用来判断已安装的软件包(或文件)是否被修改,此方式可使用的命令格式分为以下 3 种。
[root@localhost ~]# rpm -Va
-Va 选项表示校验系统中已安装的所有软件包。
 
[root@localhost ~]# rpm -V 已安装的包名
-V 选项表示校验指定 RPM 包中的文件,是 verity 的首字母。
 
[root@localhost ~]# rpm -Vf 系统文件名
-Vf 选项表示校验某个系统文件是否被修改。
 
例如我们校验 apache 软件包中所有的安装文件是否被修改,可执行如下命令:
[root@localhost -]# rpm -V httpd
可以看到,执行后无任何提示信息,表明所有用 apache 软件包安装的文件均未改动过,还和从原软件包安装的文件一样。
 
接下来尝试对 apache 的配置文件 /etc/httpd/conf/httpd.conf 做适当修改,修改格式如下:
[root@localhost ~]#vim /etc/httpd/conf/httpd.conf
...省略部分内容...
Directorylndex index.html index.html.var index.php
#这句话是定义apache可以识别的默认网页文件名。在后面加入了index.php
#这句话大概有400行左右
…省略部分内容...
由于我们还未学习如何配置 apache,为防止其崩溃,这里仅尝试修改 apache 的默认网页文件。按照以上格式对文件进行修改后保存退出,再次使用 rpm -V 命令对 apache 软件包进行验证:
[root@localhost ~]# rpm -V httpd
S.5....T. c /etc/httpd/conf/httpd.conf
可以看到,结果显示了文件被修改的信息。该信息可分为以下 3 部分:
  1. 最前面的 8 个字符(S.5....T)都属于验证信息,各字符的具体含义如下:
    • S:文件大小是否改变。
    • M:文件的类型或文件的权限(rwx)是否改变。
    • 5:文件MD5校验和是否改变(可以看成文件内容是否改变)。
    • D:设备的主从代码是否改变。
    • L:文件路径是否改变。
    • U:文件的属主(所有者)是否改变。
    • G:文件的属组是否改变。
    • T:文件的修改时间是否改变。
    • .:若相关项没发生改变,用 . 表示。
  2. 被修改文件类型,大致可分为以下几类:
    • c:配置文件(configuration file)。
    • d:普通文档(documentation)。
    • g:"鬼"文件(ghost file),很少见,就是该文件不应该被这个 RPM 包包含。
    • l:授权文件(license file)。
    • r:描述文件(read me)。
  3. 被修改文件所在绝对路径(包含文件名)。
 
由此,S.5....T. c S.5....T. c /etc/httpd/conf/httpd.conf 表达的完整含义是:配置文件 httpd.conf 的大小、内容、修改时间被人为修改过。
注意,并非所有对文件做修改的行为都是恶意的。通常情况下,对配置文件做修改是正常的,比如说配置 apache 就要修改其配置文件,而如果验证信息提示对二进制文件做了修改,这就需要小心,除非是自己故意修改的。
 

Linux RPM数字证书验证

RPM 包校验方法只能用来校验已安装的 RPM 包及其安装文件,如果 RPM 包本身就被动过手脚,此方法将无法解决问题,需要使用 RPM 数字证书验证方法。
简单的理解,RPM 包校验其实就是将现有安装文件与最初使用 RPM 包安装时的初始文件进行对比,如果有改动则提示给用户,因此这种方式无法验证 RPM 包本身被修改的情况。
数字证书,又称数字签名,由软件开发商直接发布。Linux 系统安装数字证书后,若 RPM 包做了修改,此包携带的数字证书也会改变,将无法与系统成功匹配,软件无法安装。
使用数字证书验证 RPM 包的方法具有如下 2 个特点:
  1. 必须找到原厂的公钥文件,然后才能进行安装。
  2. 安装 RPM 包会提取 RPM 包中的证书信息,然后和本机安装的原厂证书进行验证。如果验证通过,则允许安装;如果验证不通过,则不允许安装并发出警告。
 
数字证书默认会放到系统中/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6位置处,通过以下命令也可验证:
#系统中的数字证书位置
[root@localhost ~]# ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
-rw-r--r--.1 root root 1706 6 月 26 17:29 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
 
安装数字证书的命令如下:
[root@localhost ~]# rpm --import /efc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
--import表示导入数字证书
 
数字证书安装完成后,可使用如下命令进行验证:
[root@localhost ~]# rpm -qa|grep gpg-pubkey
gpg-pubkey-c105b9de-4e0fd3a3
可以看到,数字证书已成功安装。在装有数字证书的系统上安装 RPM 包时,系统会自动验证包的数字证书,验证通过则可以安装,反之将无法安装(系统会报错)。
 

Linux提取RPM包文件(cpio命令)

cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复制到归档包中
    归档包,也可以称为文件库,就是cpio或者tar格式的格式的文件,该文件中包含其他文件以及一些相关信息(文件名、访问权限等)。归档包既可以是磁盘中的文件,也可以是磁带或管道。
cpio 命令可以看做是备份或还原命令,因为它可以将数据(文件)备份到 cpio 归档库,也可以利用 cpio 文档库对数据进行恢复。
cpio 命令主要有以下 3 种基本模式:
    1. "-o" 模式:指的是 copy-out 模式,就是把数据备份到文件库中,命令格式如下:
      [root@localhost ~]# cpio -o[vcB] > [文件丨设备]
      各选项含义如下:
      • -o:copy-out模式,备份;
      • -v:显示备份过程;
      • -c:使用较新的portable format存储方式;
      • -B:设定输入/输出块为 5120Bytes,而不是模式的 512Bytes;
    2. 比如,使用 cpio 备份数据的命令如下:

 

[root@localhost ~]#find /etc -print | cpio -ocvB > /root/etc.cpio
#利用find命令指定要备份/etc/目录,使用>导出到etc.cpio文件
[root@localhost ~]# II -h etc.cpio
-rw--r--r--.1 root root 21M 6月5 12:29 etc.cpio
#etc.cpio文件生成
    1. "-i" 模式:指的是 copy-in 模式,就是把数据从文件库中恢复,命令格式如下:
      [root@localhost ~]# cpio -i[vcdu] < [文件|设备]
      各选项的含义为:
      • -i:copy-in 模式,还原;
      • -v:显示还原过程;
      • -c:较新的 portable format 存储方式;
      • -d:还原时自动新建目录;
      • -u:自动使用较新的文件覆盖较旧的文件;
    2.  
比如,使用 cpio 恢复之前备份的数据,命令如下:
[root@localhost ~]# cpio -idvcu < /root/etc.cpio
#还原etc的备份
#如果大家査看一下当前目录/root/,就会发现没有生成/etc/目录。这是因为备份时/etc/目录使用的是绝对路径,所以数据直接恢复到/etc/系统目录中,而没有生成在/root/etc/目录中
  1. "-p" 模式:指的是复制模式,使用 -p 模式可以从某个目录读取所有文件,但并不将其备份到 cpio 库中,而是直接复制为其他文件。
     
    例如,使用 -p 将 /boot/ 复制到 /test/boot 目录中可以执行如下命令:

     

    [root@localhost ~]# cd /tmp/
    #进入/tmp/目录
    [root@localhost tmp]#rm -rf*
    #删除/tmp/目录中的所有数据
    [root@localhost tmp]# mkdir test
    #建立备份目录
    [root@localhost tmp]# find /boot/ -print | cpio -p /tmp/test
    #备份/boot/目录到/tmp/test/目录中
    [root@localhost tmp]# ls test/boot
    #在/tmp/test/目录中备份出了/boot/目录
 

使用 cpio 命令提取 RPM 包中指定文件

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2021-03-16 13:06  持久  阅读(152)  评论(0编辑  收藏  举报