工欲善其事必先利其器----浅谈RPM包管理工具

工欲善其事必先利其器----浅谈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管理工具,这个就很方便了。

你可能感兴趣的:(命令,Linux学习,数据库,linux,运维)