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:适用于x86,64位系统架构
3、获取程序包途径:
(1)通过官方网站的文件服务器或镜像站点获取;
http://mirrors.aliyun.com:阿里云镜像站点
http://mirrors.sohu.com:搜狐镜像站点
http://mirrors.163.com:网易镜像站点
(2)项目的官方站点获取;
(3)第三方组织获取;
EPEL
搜索引擎:
(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:仅升级;
-v:verbose,显示详细信息;
-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 mismatch:readLink路径不匹配
U User ownership differs:属主发生改变
G Group ownership differs:属组发生改变
T mTime differs:修改时间戳改变
P caPabilities differ:caPabilities发生改变
改变的文件类型:
c %config 配置文件
d %doc 文档文件
g %ghost 占位文件,也就是文件内容不包含在软件包有效内容里面
l %license 许可证文件
r %readme 说明文件
8、实例
以安装zsh为例:
(1)查询zsh是否已经安装
(2)查询包详细信息
(3)测试安装
这里有警告提示,原因是没有做来源可靠性检验
(4)导入秘钥并安装
可以用-K来手动验证包完整性:rpm -K PACKAGE_FILE
(5)查询与zsh相关的配置文件
(6)检查数据完整性
手动修改某个配置文件,例如增加几个字符。
这里会提示配置文件(c)的大小(S),内容(5),时间戳(T)发生改变。
(7)卸载
(8)重新安装
9、结语
rpm虽然已经非常强大,但遇到包之间的依赖性就显得特别繁琐。这时候就需要更为强大的包管理工具yum,下篇将会提及。
原文地址:http://zhouyuanhang.blog.51cto.com/10907853/1728754