环境说明:Win7+Vmware11+Centos6.6,使用CentOS6.6安装光盘
RPM全名是“RedHat Package Manager”,RPM最大优点是将要安装的软件先编译过,并且打包成为RPM机制的安装包,通过包装好的软件里头默认的数据库记录这个软件要安装的时候必须具备的依赖属性软件,当安装在你的Linux主机是,RPM会先依照软件里头的数据查询Linux主机的依赖属性软件是否满足,若满足则予以安装,若不满足则不予以安装。
在执行rpm包管理之前,我们首先将CentOS6.6光盘挂载到本机中:
#mount /dev/cdrom /media/mnt
其次,进入到rpm包目录中,在此目录中我们会看到很多rpm包。
#cd /media/mnt/Packages
下面我们就从rpm包的格式开始说起。下面就是一个典型的rpm包,从此包我们可查询到包的包名、版本号、发行号、适用平台等;
rp-pppoe-3.1-5.x86_64.rpm
rp-pppoe为包名;
3.1为版本信息;
5为发布次数;
x86_64为适合的硬件平台;
rpm为扩展名;
RPM默认的安装路径
/etc | 一些设置文件放置的目录 |
/usr/bin | 一些可执行文件 |
/usr/lib | 一些程序使用的动态函数库 |
/usr/share/doc | 一些基本的软件使用手册与帮助文档 |
/usr/share/man | 一些man page 文件 |
在对rpm包的管理过程中,我们主要从安装、升级、卸载、查询、校验等几个方面进行。
1、安装(install)
安装软件是root的工作,因此要获得root身份才能操作rpm命令,用rpm安装软件很简单。例如我们要安装xvattr-1.3-18.el6.x86_64.rpm 的文件,我们可以这样操作如下图。
通过上图的操作我们可以知道安装rpm的简单用法,不过,我们无法显示安装的进度,因此我们通常会使用一些组合命令来执行安装。
-i:install安装的意思
-v:查看更详细的安装信息画面,每增加一个v,显示的安装信息会更加详细
-h:以#号信息显示安装进度
例如如下图:
在安装rpm包时,我们还可以同时安装多个rpm包,例如如下图:
在安装rpm之前,我们可以使用--test测试该软件是否可以安装到用户的Linux环境当中,可找出是否有属性的依赖的问题。第一张图是可以正常安装软件,第二张图不能正常安装软件。
如果我们在安装的过程中发现问题,或者已经知道会发生的问题,而还是要安装软件时,可以使用如下参数"强制"安装。
--nodeps:软件存在属性依赖问题而无法安装时使用,但会造成软件无法正常运行
--replacefiles:如果某软件已安装或版本信息不符合是,可以使用这个参数直接覆盖文件,但覆盖的文 件是无法恢复的
--replacepkgs:重新安装并覆盖原有的文件
--force:强制安装
--oldpackage:高级版本的包无法使用,因此降级用的
--relocate:修改安装路径
在安装过程中,建议使用-ivh参数进行安装就行,如果安装过程中发现问题,一个一个去将问题找出来,不要使用"暴力安装方法",即--force去强制安装。
2、升级(upgrade/freshen)
RPM安装升级也比较简单,就是用-Uvh或-Fvh升级即可,不过-U和-F的意义不太一样。
-Uvh:后面接的软件即使没有安装过,则系统将予以直接安装;若后面接的软件有安装过旧的版本,则系统自动更新至新版,如下图,已经安装了旧版本,执行-Uvh,则系统自动更新。
-Fvh:如果后面接的软件并未安装到你的Linux系统上,则该软件不会被安装;即只有已安装到Linux系统内的软件会被升级,如下图,没有安装旧版本,则系统不会自动升级。
在使用升级时,也可以使用test、force等特殊参数。
3、查询(query)
RPM在查询的时候,其实查询的地方是/var/lib/rpm这个目录下的数据库文件。查询就是查看某包是否已经安装,以及检查安装的所有包,还可以查看某包的详细信息等。
(1)查询某包或某些包是否安装,例如
(2)查询已经安装的所有包,例如
(3)查询某文件是由哪个包安装生成,例如
(4)尚未安装的包文件的相关信息,
-p:注意-p选项可以同一下(5)-(12)的参数配合使用,但-p是用于查找某个RPM内部的信息,而非已安装的软件信息。例如-qil
(5)查询某包的简要说明信息,例如
(6)查询某包安装生成的文件列表,例如
(7)查询某包安装完成后生成的所有配置文件,例如
(8)查询某包安装完成后生成的所有帮助文件
(9)查看某包制作时随版本变化的changelog信息
(10)查询某包提供的capabilities;
(11)查询某包所依赖的capabilities;
(12)查询某包安装或卸载时执行脚本
rpm -q --scripts PACKAGE_NAME
脚本有四类:
preinstall:安装过程开始之前执行的脚本
postinstall:安装过程完成之后执行的脚本
preuninstall:卸载开始之前执行的脚本
postinstall:卸载过程完成之后执行的脚本
4、验证与数字证书(Verify/Signature)
验证:查询包安装之后生成的文件是否发生了改变,我们使用-V选项,常用选项:
-Vf:列出某个文件是否被改动过
-Vp:后面加的是文件名称、列出该软件内可能被改动过的文件
-Va:列出目前系统上面所有被改动过的文件
例如
在上图中我们发现字母c前面有一串字符串,c前面的8个信息是:
S file Size differs:文件的容量大小是否被改变
M Mode differs :文件的类型或文件的属性是否被改变
5 digest (formerly MD5 sum) differs:MD5这一种指纹码的内容已经不同
D Device major/minor number mismatch:设备的主/次代码是否改变
L readLink(2) path mismatch:Link路径已被改变
U User ownership differs:文件所有者已被改变
G Group ownership differs:文件用户组已被改变
T mTime differs:文件的创建时间已被改变
c代表的是"Configfile"的意思,也就是文件类型,包括
c:设置文件
d:文档
g:"鬼"文件
l:授权文件
r:自述文件
数字证书:可以验证rpm包的来源合法性和数据完整性。在本文中使用的是Centos6.6的光盘,所以介绍一下验证光盘中程序包的来源及完整性。
#rpm --import RPM-GPG-KEY-CentOS-6
如果显示OK,则rpm包可以使用和安装。
数字证书其它常用选项:
--nosignature:不检查来源合法性
--nodigest:不检查完整性
5、卸载与重建数据库(erase/rebuilddb)
卸载:移除已经安装的包,例如
卸载的常用选项
--nodeps:忽略依赖关系
--allmatches:如果一个程序包同时安装多个版本,则此选项一次全部卸载之
--test:测试卸载,dry-run模式;
注意:如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会被删除,而是被重命名(加后缀.rpmsave)后留存
重建数据库:由于RPM文件经常会安装、删除、升级等,某些操作或许可能会导致RPM数据库/var/lib/rpm/内的文件损坏,因此我们有时需要对数据库进行重建。
--initdb:初始化数据库,即数据库完全不存在时,可新建之
--rebuilddb:无论当前数据存在与否,都会直接重建此库(这个操作很危险)
本文出自 “Linux学习” 博客,谢绝转载!