声明:本文是基于CentOS操作系统进行介绍的
一、简介
-
虽然现在CentOS操作系统早已经完成了对
YUM的支持了,但是由于YUM依然还是基于
RPM机制的,所以仍然很有必要对RPM进行了解的。
RPM的全名是“RedHat Package Manager”,是由RedHat公司推出的一个软件管理机制,它是以一种数据库记录的方式来将你所需的软件安装到你的Linux系统上的。 它最大的特点是将源码程序进行编译后,再打包成RPM格式的软件包;在安装软件时,RPM会首先读取包里面的配置文件,然后通过配置文件检查系统是否符合该软件安装时满足的依赖需求;若满足,则给予安装,否则不予安装。安装时,会将该软件的信息全部写入RPM数据库,以便未来管理(升级、卸载等)软件时使用。
这种形式的好处是,首先软件的传输与安装都更方便,不用再进行编译了;然后就是软件在安装过程中都已经其全部信息写入到了系统RPM数据库上了,方便未来对软件的管理(升级、卸载等),当然还有一些其他的有点,比如:会检查对磁盘、操作系统等进行检查,避免程序出错;提供软件的详细信息(依赖需求、版本、用途等)。
这种形式也有不好的地方,比如:平台依赖性特别大(软件的安装环境要与包生成的环境一致或者相似),安装过程复杂(要解决依赖需求),软件卸载不容易(主要是软件卸载时,也会将其依赖程序卸载掉,处理不当很容易造成系统问题)。
二、与RPM相关的目录
-
通常情况下,RPM类型的软件在安装的时候,相关的程序就会去读取RPM包内的配置文件,然后将该配置文件里的数据与系统里的信息进行对比,以找出与其有依赖需求的程序是否安装;若其依赖的程序都已经安装好了,则安装该RPM文件,否则停止安装。
RPM文件在安装完成之后,程序会将该软件的相关信息写入到 /var/lib/rpm 目录下的数据库文件中,该目录下的数据库文件记录着已安装软件的版本信息、依赖需求信息,以及数字签名信息等。
除了上面提到的那个记录RPM数据库信息的 /var/lib/rpm目录,软件安装时也会涉及到以下几个目录: -
目录 用途 /etc 放置配置文件的目录 /usr/bin 放置可执行文件的目录 /usr/lib 程序执行所需要的动态函数库的目录 /usr/share/doc 放置软件的手册及说明文件的目录 /usrshare/man 放置帮助文档的目录
三、RPM包安装、升级与更新、查询
- 1、RPM包安装
-
软件安装是root(超级管理员)的权限,所以
rpm 这条命令也就只有root才能执行,其他用户是无法使用的。
通常情况下我们安装RPM包可以直接使用一下这个命令: -
- rpm -ivh packagename
- 这也是使用 rpm命令安装RPM包的基本命令格式,,其中的参数含义如下:
-
- -i :install 安装的意思
-
- -v:可以显示安装过程的详细信息
-
- -vv 可以显示更详细的安装信息
-
- -h:可以显示包的安装进度
-
- 在安装过程中,我们可能会遇到一些问题,但又不想放弃安装的情况,在这种情形下,可以参考一下参数进行安装:
-
选项 含义 使用场景 注意 –nodeps 忽略依赖关系,继续安装 当软件安装发生依赖需求时,但仍想继续安装的时候 软件之所以会产生依赖,是因为其功能的实现需要该依赖的支持,若要强制安装,则有可能会导致安装后的软件无法使用 –replacepkgs 该选项会将系统中之前安装过的包进行覆盖安装 当软件在安装过程中提示该包已经被安装过时,可以使用此选项进行覆盖安装 –replacefiles 在安装时,对系统中已安装的RPM包文件进行覆盖 在安装RPM包时,若系统中已经有安装过该RPM包的文件或者版本不符时,则会将原有的RPM包文件进行覆盖并安装 覆盖时,原有的所有信息都将会丢失,所以此选项要慎用!! –force 强制安装 相当于 –replacepkgs 和 –replacefiles 的综合体 –test 测试安装,但不真正执行安装,即dry run模式 用来检查该RPM包是否可以安装到该系统上,此过程不会进行正式安装 –nosignature 不检查数字签名 忽略数字签名检查 –nodigest 不检查包完整性 –justdb 更新软件在RPM数据库内的相关信息 RPM数据库因为某些原因损坏或是发生错误时,可以使用该选项更新软件在RPM数据库中的信息 –prefix 想要自定义的路径 后面跟一个想要的路径,即可将该软件安装到此指定的路径 不想使用默认的安装路径,想像Windows上一样自定义安装路径 –noscripts 不让软件在安装过程中自行执行某些系统指令 可以指定是在安装前、安装后、卸载前、卸载后
注意:在安装时,不建议使用强制安装(即使用:–force),这样安装的软件可能会产生很多不可预测的问题,软件不能正常使用,同时更会可能浪费精力与时间!!
2、升级与更新
使用RPM进行升级与升级可以使用 -Uvh 和 -Fvh 两个命令参数,它们的命令选项与 install 是一样的,此处就不再做介绍了!
不过 -Uvh 和 -Fvh 之间还是有区别的: - -UVh
-
- 若后面跟的软件即使没有被安装过,系统也会将其直接安装;若后面跟的软件是已经安装过的旧版本,系统则将对其进行更新
- -Fvh
-
3、查询
-
自从有了YUM之后,查询就基本快成了RPM用的最多的功能了!使用RPM进行软件包的相关查询,要首先明白一点的就是RPM查询时是到RPM的数据库及RPM包库中进行查询,没有安装过的包,RPM数据库中是没有相关数据的,也就查不出来!以下是RPM查询时常用到的参数及选项:
-
参数及选项 含义 -q 后面跟软件名,查询该软件是否已安装 -qa 列出所有的已安装过的rpm包 -qf 后面跟文件名,查询一个该文件来自于哪一个rpm包 (已安装的rpm) -q –changelog 查询软件版本更新日志 -qc 查询软件包的配置文件(不是所有包都有配置文件,找的只是在/etc目录下的文件) -qd 查询软件包的帮助文档 -qi 查询软件包的详细信息,包括版本,开发商等信息 -ql 查询软件包在系统中的所有文件路径 -q –scripts 列出安装后是否有要执行的脚本 -q –provides 查询自身的功能 -qR 查询与软件相依赖的软件所包含的文件 -qp[licdR] 后面跟 RPM包名 查看未安装的RPM包的各项信息