工欲善其事必先利其器----浅谈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管理工具,这个就很方便了。
推荐阅读
- Linux|109 个实用 shell 脚本
- 数据库|SQL行转列方式优化查询性能实践
- 云原生微服务技术趋势解读
- 韵达基于云原生的业务中台建设 | 实战派
- mysql|一文深入理解mysql
- 达梦数据库|DM8表空间备份恢复
- 数据技术|一文了解Gauss数据库(开发历程、OLTP&OLAP特点、行式&列式存储,及与Oracle和AWS对比)
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- linux笔记|linux 常用命令汇总(面向面试)
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件