linux软件管理器之――rpm

   rpm的全名为“RedHat Package Manager”,是一种软件管理机制。顾名思义,这个机制最早是有RedHat公司开发出来的,后来因为实在很好用,包括fedora,centos,suse等知名厂商也使用了这个机制来作为软件安装的管理方式。rpm是以一种数据库记录的方式来将你所需要的软件安装到你的linux系统的一套管理机制。


rpm包的命名格式

    rpm的命名格式为:name-version-relase.arch.rpm

    version: major.minor.release,包括主版本号,次版本号,修正号

    

    release: rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS

   

     arch: 适用于的硬件平台,

   x86: i386, i486, i586, i686等;

x86_64: x86_64

powerpc: ppc

noarch: 依赖于虚拟机,与平台无关

    下面举一个简单的例子:


wKiom1PLwzSTmYqHAAC8N8G1lLc273.jpg

分包机制:

    在使用rpm包时,由于整个包有非常多的功能,而每位使用者的需求有可能不同,为了解决这一问题,就有了分包的机制。

其中分为核心包和子包:

以此包为例:bash-4.2.3-3.centos7.x86_64.rpm

其核心包即主包:命名与源程序一致

  bash-4.2.3-3.centos7.x86_64.rpm

而子包可能就为:

  bash-a-4.2.3-3.centos7.x86_64.rpm

  bash-b-4.2.3-3.centos7.x86_64.rpm

  bash-devel-4.2.3-3.centos7.x86_64.rpm


获取rpm包的途径

1、发行的光盘或站点服务器

镜像:

http://mirrors.163.com

http://mirrors.sohu.com

2、项目的官网

源代码

rpm包

3、很多第三方机构或个人制作并公开发布许多rpm包

http://rpmfind.net

http://rpm.pbone.net


可靠的途径:EPEL

Fedora-EPEL


RPM的基本功能


安装程序包:

格式:

rpm [option] /path/to/package_file 

【options】

-i: install安装选项

-v:显示详细的信息,下面的2个甚至3个V表示的详细的程度。

-vv:

-vvv:

-h: 

一般比较常用的组合选项:-ivh

--test: 仅作测试,并没有真正执行安装

--nodeps:忽略依赖关系

    在安装的过程中,如果该包依赖于其它包则:

    1、解决依赖关系

    2、忽略依赖关系(使用--nodeps选项),能安装上,但有可能无法运行;

--replacepkgs:重新安装,如果原有配置文件作了修改,很有可能不执行替换

--prefix PATH:将软件安装到指定目录

卸载程序包

格式:

rpm [option] package_name

-e: erase 卸载

--nodeps:忽略依赖关系

        如果被其它包所依赖:

1、将依赖于此包的所有包一并卸载

2、忽略依赖关系能卸载,但依赖于此包程序包可能会运行不正常;

注意:如果包的配置文件安装后曾被改动过,卸载时,此文件将不会被卸载,而会被重命名保存下来


升级程序包

格式:

rpm [option] /path/to/package_file


-U :升级或安装(此前可以没有)  常用组合:-Uvh

-F :纯升级 (此前必须存在)       常用组合:-Fvh

--force: 强制升级

注意:不应该对内核执行升级操作,而是安装另一个内核,因为系统允许多内核并存。


查询操作

查询某包是否安装

 rpm -q package_name...

wKiom1PYs1fA5pj-AABlknMjCxw906.jpg

查询所有已经安装的包

 rpm -qa

 wKioL1PYtPPy_K1ZAAHL5MLL-2U630.jpg

查询包的描述信息

 rpm -qi package_name

查询某包安装生成了哪些文件

 rpm -ql package_name

查询某包安装生成了哪些配置文件

 rpm -qc package_name

查询某包安装生成了哪些帮助文件

 rpm -qd package_name

查询程序包的相关脚本

 rpm -q --scripts package_name

查询某文件是由哪个包安装生成的

 rpm -qf /path/to/some_file

对尚未安装的包执行查询

 rpm [option] /path/to/package_file

-qpi:描述信息

-qpl:安装生成了哪些文件

-qpc:安装生成了哪些配置文件

-qpd:安装生成了哪些帮助文件



校验:

用于检查包安装生成的文件属性是否发生变化

rpm -V package_name

wKioL1PYtUGyfR2UAAA4wX6jjeE588.jpg

 某属性无变化,显示为.(点)


       S file Size differs

       M Mode differs (includes permissions and file type)

       5 digest (formerly MD5 sum) differs

       D Device major/minor number mismatch

       L readLink(2) path mismatch

       U User ownership differs

       G Group ownership differs

       T mTime differs

       P caPabilities differ


     


来源合法性及完整性检验:


在检验之前必须有个前提:在当前系统上导入包的制作者的公钥

具体导入的方法:

rpm --import /path/to/key_file


# rpm -qa gpg-pubkey*

显示所有已经导入的gpg格式的公钥


# rpm -qi gpg-pubkey-NAME

显示密钥的详细信息


检查包:安装过程中会自动执行


手动检查:

rpm -K /path/to/package_file

rpm --checksig /path/to/package_file


不检查包完整性:

rpm -K --nodigest

不检查来源合法性:

rpm -K --nosignature


库重建:

rpm的数据库目录为:/var/lib/rpm

重建:

rpm --initdb:初始化

如果事先没有库,会新建一个;如果有,则不新建;

rpm --rebuilddb: 重建

直接重建,覆盖原有的数据库


如需更详细的rpm用法可参考rpm的中文介绍:

http://os.51cto.com/art/201108/285804.htm




你可能感兴趣的:(linux,rpm)