工欲善其事必先利其器----浅谈RPM包管理工具
RPM------全称Red-Hat Package Manager
由Red-Hat公司提出,被众多Linux发行版采用。它可以建立统一的数据库文件,详细记录软件包,卸载等变化信息,并且自动分析软件包的***依赖关系***,验证打包软件的完整性以及由此产生的软件安装
Linux的依赖关系主要是因为软件大部分是零碎的,其粒度比windows的小很多,软件之间的依赖关系很强烈,所以Linux中的软件依赖关系成一颗拓扑树结构,比如A直接或间接依赖B,那么B就不可能直接或间接依赖A。试想从时间上A、B必然有一个先出现,而先出现的不可能依赖于后出现的;并且如果A与B互相依赖则就是“鸡与蛋”的问题,因此必然有一个先出现而另一个依赖于先者(转)。
RPM软件包素材参考我们一般是登录一个开发者网站进行查看—www.rpm.org
那么RPM包的软件格式是什么样的呢??
以zip-3.0-11.el7.x86_64.rpm这个安装包为例
zip-3.0-11.el7.x86_64.rpm
zip:表示这个软件的名称
3.0:这是这个软件的版本号
11.el7:11代表这个软件发布了多少次,el7代表这个是Red Hat 7.x,CentOS 7.x和CloudLinux 7.x的下载和安装,版本低的无法进行安装。
x86-64:则代表x86架构的64位拓展,向后兼容于16位[32位的x86架构。
.rpm:代表扩展名
RPM的命令格式:
RPM命令能够实现几乎所有对RPM软件包的管理功能,当我们执行[man rpm]这条命令后,可以获得关于rpm命令的详细帮助信息。
rpm的命令主要包括:查询、验证rpm软件包的相关信息,安装、升级、卸载RPM软件包,维护RPM数据库信息等综合管理操作。
我们可以通过rpm -q这条命令来查询已经安装的软件包
命令格式
rpm -q[子选项] [软件命]
子选项的命令:
-a ##查询所有软件。
-b<完成阶段><软件档>+或-t <完成阶段><软件档>+ ##设置包装软件的完成阶段,并指定软件档的文件名称。
-c ##只列出组态配置文件,本参数需配合"-l"参数使用。
-d ##只列出文本文件,本参数需配合"-l"参数使用。
-e<软件档>或--erase<软件档> ##删除指定的软件。
-f<文件>+ ##查询拥有指定文件的软件。
-h或--hash ##软件安装时列出标记。
-i ##显示软件的相关信息。
-i<软件档>或--install<软件档> ##安装指定的软件档。
-l ##显示软件的文件列表。
-p<软件档>+ ##查询指定的RPM软件档。
-q ##使用询问模式,当遇到任何问题时,rpm指令会先询问用户。
-R ##显示软件的关联性信息。
-s ##显示文件状态,本参数需配合"-l"参数使用。
-U<软件档>或--upgrade<软件档> ##升级指定的软件档。
-v ##显示指令执行过程。
-vv ##详细显示指令执行过程,便于排错。
-addsign<软件档>+ ##在指定的软件里加上新的签名认证。
--allfiles ##安装所有文件。
--allmatches ##删除符合指定的软件所包含的文件。
--badreloc ##发生错误时,重新配置文件。
--buildroot<根目录> ##设置产生软件时,欲当作根目录的目录。
--changelog ##显示软件的更改记录。
--checksig<软件档>+ ##检验该软件的签名认证。
--clean ##完成软件的包装后,删除包装过程中所建立的目录。
--dbpath<数据库目录> ##设置欲存放RPM数据库的目录。
--dump ##显示每个文件的验证信息。本参数需配合"-l"参数使用。
--excludedocs ##安装软件时,不要安装文件。
--excludepath<排除目录> ##忽略在指定目录里的所有文件。
--force ##强行置换软件或文件。
--ftpproxy<主机名称或IP地址> ##指定FTP代理服务器。
--ftpport<通信端口> ##设置FTP服务器或代理服务器使用的通信端口。
--help ##在线帮助。
--httpproxy<主机名称或IP地址> ##指定HTTP代理服务器。
--httpport<通信端口> ##设置HTTP服务器或代理服务器使用的通信端口。
--ignorearch ##不验证软件档的结构正确性。
--ignoreos ##不验证软件档的结构正确性。
--ignoresize ##安装前不检查磁盘空间是否足够。
--includedocs ##安装软件时,一并安装文件。
--initdb ##确认有正确的数据库可以使用。
--justdb ##更新数据库,当不变动任何文件。
--nobulid ##不执行任何完成阶段。
--nodeps ##不验证软件档的相互关联性。
--nofiles ##不验证文件的属性。
--nogpg ##略过所有GPG的签名认证。
--nomd5 ##不使用MD5编码演算确认文件的大小与正确性。
--nopgp ##略过所有PGP的签名认证。
--noorder ##不重新编排软件的安装顺序,以便满足其彼此间的关联性。
--noscripts ##不执行任何安装Script文件。
--notriggers ##不执行该软件包装内的任何Script文件。
--oldpackage ##升级成旧版本的软件。
--percent ##安装软件时显示完成度百分比。
--pipe<执行指令> ##建立管道,把输出结果转为该执行指令的输入数据。
--prefix<目的目录> ##若重新配置文件,就把文件放到指定的目录下。
--provides ##查询该软件所提供的兼容度。
--queryformat<档头格式> ##设置档头的表示方式。
--querytags ##列出可用于档头格式的标签。
--rcfile<配置文件> ##使用指定的配置文件。
--rebulid<软件档> ##安装原始代码软件,重新产生二进制文件的软件。
--rebuliddb ##以现有的数据库为主,重建一份数据库。
--recompile<软件档> ##此参数的效果和指定"--rebulid"参数类似,当不产生软件档。
--relocate<原目录>=<新目录> ##把本来会放到原目录下的文件改放到新目录。
--replacefiles ##强行置换文件。
--replacepkgs ##强行置换软件。
--requires ##查询该软件所需要的兼容度。
--resing<软件档>+ ##删除现有认证,重新产生签名认证。
--rmsource ##完成软件的包装后,删除原始代码。
--rmsource<文件> ##删除原始代码和指定的文件。
--root<根目录> ##设置欲当作根目录的目录。
--scripts ##列出安装软件的Script的变量。
--setperms ##设置文件的权限。
--setugids ##设置文件的拥有者和所属群组。
--short-circuit ##直接略过指定完成阶段的步骤。
--sign ##产生PGP或GPG的签名认证。
--target=<安装平台>+ ##设置产生的软件的安装平台。
--test ##仅作测试,并不真的安装软件。
--timecheck<检查秒数> ##设置检查时间的计时秒数。
--triggeredby<软件档> ##查询该软件的包装者。
--triggers ##展示软件档内的包装Script。
--verify ##此参数的效果和指定"-q"参数相同。
--version ##显示版本信息。
--whatprovides<功能特性> ##查询该软件对指定的功能特性所提供的兼容度。
--whatrequires<功能特性> ##查询该软件对指定的功能特性所需要的兼容度。
关于软件卸载,上面显示用rpm -e选项
但是,有个值得注意的点是,删除软件的时候,会删除相关软件的依赖关系,但是有的以来关系可能别的软件也会调用,所以删除的时候可能会导致相关的信赖关系错乱。
所以这个时候需要用到**–nodeps**这条命令
例如:
[root@zhu ~]# rpm -e mysql
error: Faileddependencies: ##存在依赖关系,所以提示错误
[root@zhu ~]# rpm -e --nodeps mysql-server
warning: /var/log/mysqld.log saved as /var/log/mysqld.log.rpmsave
这边就是RPM包管理用具的使用方法,这边我们能看到,由于Linux的零碎性,我们需要验证软件包的依赖关系,存在可以直接安装,假如不存在就需要自己安装依赖关系,这个过程就会比较麻烦了,所以rpm管理工具还是有缺陷的,下回我们来谈一谈yum管理工具,这个就很方便了。