1、概述:

一个程序在开发完成至运作的过程中,需要编译器进行编译,而这个过程对于初学者来说是非常复杂与繁琐的。这时候就需要有一种程序包管理器,来帮助我们完成这些工作。RPM全名为RedHat Package Manager,对于centOS类系统来说,rpm就是Linux里管理程序的一种方式,可以对程序包进行安装,升级,卸载,查询和校验。RPM软件的安装、删除、更新只有root权限才能使用。对于查询功能任何用户都可以操作,如果普通用户拥有安装目录的权限,也可以进行安装。


 

2、rpm包命名格式:

包名称—版本号—第几次制作—适用系统—运行架构.rpm

例:xen-ocaml-4.4.2-4.el6.x86_64.rpm

xen-ocaml:包名称

4.4.2:包版本号

4:第四次制作

el6:兼容centOS 6系列系统

x86_64:适用于x8664位系统架构



3、获取程序包途径:

(1)通过官方网站的文件服务器或镜像站点获取;

http://mirrors.aliyun.com:阿里云镜像站点

http://mirrors.sohu.com:搜狐镜像站点

http://mirrors.163.com:网易镜像站点

(2)项目的官方站点获取;

(3)第三方组织获取;

EPEL

搜索引擎:

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

(4)自己动手制作(初学者不建议);

通过非官方站点获取到的程序包,建议要检查合法性及包完整性。



4、安装与升级程序包

命令格式: rpm {-i|--install} [install-options] PACKAGE_FILE ...

       rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

       rpm {-F|--freshen} [install-options] PACKAGE_FILE ....

选项:

-i--install:安装操作;

-U--update -F--freshen:升级操作;

-U:升级或安装新程序包;

-F:仅升级;

-vverbose,显示详细信息;

-vv:更详细的信息;

[install-options]

-h:安装时显示进度条

--test:测试安装,检查且报告依赖关系及冲突消息等;

--nodeps:忽略包之间的依赖;

--replacepkgs:重新安装;

--noscripts:不使用任何脚本;

--nopre:禁用安装过程开始前运行的脚本;

--nopost:禁用安装过程完成后运行的脚本;

--nopreun:禁用卸载过程开始前运行的脚本;

--nopostun:禁用卸载过程完成后运行的脚本;

--nosignature:不检查包签名信息,不检查来源合法性;

--nodigest:不检查包完整性信息;

--oldpackage:降级;

--force:强制升级;

注:(1)不要对内核做升级操作,Linux支持多内核版本共存,可以直接安装新版本内核;

(2)如果某原程序的配置文件安装后被修改,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名后提供;



5、卸载程序包

命令格式:rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

选项:

-e--erase:卸载操作

--allmatches:卸载所有匹配指定名称的程序包的各个版本;

--nodeps:忽略依赖关系;

--test:测试卸载,dry run模式;



6、查询程序包

命令格式:rpm {-q|--query} [select-options] [query-options]  

选项:

-q--query:查询

[select-options]

PACEAGE_NAME:查询指定名称的包是否安装,及其版本;

-a--all:查询所有已经安装过的包;

-f--file:查询指定的文件由哪个程序包安装生成;

-p--package:查询未安装的程序包;

--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;

--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

[query-options]

--changelong:查询rpm包的changelog

-l--list:查询程序包安装生成的所有文件列表;

-i--info:查询程序包相关的信息、版本号、大小、所属的包组等等;

-c--configfiles:查询指定的程序提供的配置文件;

-d--docfiles:查询指定的程序包提供的文档;

--provides:列出指定程序包所提供的所有CAPABILITY

-R--requires:查询指定的程序包的依赖关系;

--scripts:查询程序包自带的脚本片段;



7、校验程序包

命令格式:rpm {-V|--verify} [select-options] [verify-options]

选项:

-V:校验

如果校验的程序文件发生改变,会返回提示信息:

  S file Size differs:表示文件大小发生改变

M Mode differs (includes permissions and file type):权限发生改变

5 digest (formerly MD5 sum) differs:内容发生改变

D Device major/minor number mismatch:主次设备号不匹配

L readLink(2) path mismatchreadLink路径不匹配

U User ownership differs:属主发生改变

G Group ownership differs:属组发生改变

T mTime differs:修改时间戳改变

P caPabilities differcaPabilities发生改变

改变的文件类型:

c %config 配置文件

       d %doc 文档文件

       g %ghost 占位文件,也就是文件内容不包含在软件包有效内容里面

       l %license 许可证文件

       r %readme 说明文件


 

8、实例

以安装zsh为例:

  (1)查询zsh是否已经安装

  wKiom1Z_dznQqdqjAAA-yReHlHQ854.jpg

 (2)查询包详细信息

  wKiom1Z_eWTyzVddAANjGoioIRA328.jpg

 (3)测试安装

  wKioL1Z_esSjKkpwAAD1hdgcdUM428.jpg

   这里有警告提示,原因是没有做来源可靠性检验

 (4)导入秘钥并安装

  wKiom1Z_ezzR8QdzAAE7cgZxlps189.jpg

  可以用-K来手动验证包完整性:rpm -K PACKAGE_FILE

  wKioL1Z_fA-x19HUAAB3Qf5hdS4964.jpg

 (5)查询与zsh相关的配置文件

  wKioL1Z_fKDhrMGpAACEp8ffmgU442.jpg

 (6)检查数据完整性

    手动修改某个配置文件,例如增加几个字符。

  wKioL1Z_fRCyr0FNAAA-xawIK08318.jpg    这里会提示配置文件(c)的大小(S),内容(5),时间戳(T)发生改变。

 (7)卸载

  wKiom1Z_flaAN9llAABVXojW1Ps684.jpg   因为修改了配置文件,所以系统会把此配置文件另存。

 (8)重新安装

  wKiom1Z_fzaiHusWAAEzpARTX64770.jpg   如果包未被安装,重新安装也可执行。



9、结语

  rpm虽然已经非常强大,但遇到包之间的依赖性就显得特别繁琐。这时候就需要更为强大的包管理工具yum,下篇将会提及。