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

工欲善其事必先利其器----浅谈RPM包管理工具 RPM------全称Red-Hat Package Manager ? 由Red-Hat公司提出,被众多Linux发行版采用。它可以建立统一的数据库文件,详细记录软件包,卸载等变化信息,并且自动分析软件包的***依赖关系***,验证打包软件的完整性以及由此产生的软件安装
【命令|工欲善其事必先利其器----浅谈RPM包管理工具】? 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管理工具,这个就很方便了。

    推荐阅读