标签:rpm
本节将对目前Linux的三大主流分之之一的redhat系的程序包管理器rpm进行详述,该管理器可实现对程序包的安装、升级、查询、删除、校验等功能。rpm安装程序包时,当出现较多依赖,无法一次性解决时,可以用rpm的前端管理工具yum自动解决依赖。
但在这之前,需了解下程序包的组成格式,一般源码文件格式为name-version.tar.bz2等压缩格式 例如:httpd-2.2.29.tar.bz2 ,其中version包含有major.minor.release,major为程序的主版本号,通常代表程序的重大版本分支;minor为次版本号,通常指在该主版本号中修改或新增了某个功能,相对于程序来说只是较小改变;release为发行号,通常指修正了某个bug。
rpm包的命令格式为name-version-release.arch.rpm,例如httpd-2.2.15-45.el6.centos.x86_64.rpm,version为源码包的版本(仍为major.minor.release),该release为该rpm的release,指制作rpm包,需要对rpm包做出一些修改时。另外,也会出现release后面跟有操作系统的版本,如httpd-devel-2.2.15-45.el6.centos.x86_64.rpm,指明了rpm包适用于redhat6或兼容centos上;arch为该rpm包所适用运行的平台,会出现有i386,x86-64,noarch(意为适用所有平台)。通过以上了解能判断出一个rpm包能运行在哪种系统的哪种平台之上等;一般程序的主包和某个功能包是分开的,例如,httpd-devel-2.2.15-45.el6.centos.x86_64.rpm(适用于开发功能)
①安装 rpm {-i|--install} [install-options] PACKAGE_FILE ...
通用选项:
-v 显示信息
                    -vv    显示更详细信息
安装选项:
-h 显示进度条
                    --test    测试安装,而是用于检测软件包依赖关系以及是否会有冲突信息
                    --nodeps    忽略依赖关系,一般不建议
                    --replacepkgs    用于重新安装软件包,当有配置文件之前有修改时,不会替换配置文件
                    --replacefiles    安装包时可能会出现某个文件已存在,使用该选项,则直接覆盖
--nosignature 安装时不检查包签名信息,即不检查包来源合法性
--nodigest 安装不检查包完整性
                    --noscripts    安装程序包时不运行脚本(一般程序包安装或者卸载时,都会运行一些脚本)
示例:
~]# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm (这边先从光盘中复制该包到某目录)
                             Preparing...     ######################## [100%]
1:tree ######################## [100%]
②升级 rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
pm {-F|--freshen} [install-options] PACKAGE_FILE ...
升级某程序包时,如某个程序包没有安装过,-U会安装程序包;而-F则不进行任何操作
选项:
                                --oldpackage      用于将现有rpm程序还原回较老版本
                                --force      当程序依赖其他程序包,无法安装,使用该选项,可以强制进行升级
注意:不建议对内核进行升级,可能会导致无法启动;可以重新安装新内核,linux系统支持多 多内核并存。
③卸载 rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
      选项:    
         --allmatches  卸载所有匹配名称的程序包(可能安装程序的多个版本)
         --nodes  忽略依赖关系
         --test   测试卸载
    示例:
~]# rpm -e tree
④查询 rpm {-q|--query} [select-options] [query-options]
                挑选选项:
                                -a    查询所有已安装过的程序包
                                -f FILE    查询指定的文件是由哪个程序包生成
                                
                                -p  PACKAGE_FILE    对未安装的程序包进行查询操作
                                --whatprovides    查询指定的CAPABILITY有哪个程序包生成
                                --wharequires    查询指定的CAPABILITY被哪个程序包所依赖
                查询选项:
                                --changelog    查询rpm版本演变的日志
                                -l    程序包安装生成的所有文件列表
                                -i    显示程序包的相关信息(包括名称,版本,大小,安装时间)
                                -c    查询程序包的提供的配置文件
                                -d    查询程序包提供的文档
                                --provides    列出程序包提供的CAPABILITY
         -R,--requires  查询程序包的依赖关系
         --scripts   查询程序包自带的,在安装或卸载中使用的脚本
示例: ~]# rpm -qf /etc/issue 查询issue由哪个程序包生成的
centos-release-6-7.el6.centos.12.3.x86_64
~]# rpm -qc bash 查询bash的配置文件
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
~]# rpm -qi bash 查询bash的相关信息
⑤校验 pm {-V|--verify} [select-options] [verify-options]
        通过查询当前的程序与程序安装时存储在rpm数据库中信息进行比对
示例: ~]# rpm -V centos-release
S.5....T. c /etc/issue 之前对/etc/issue文件有过修改,所以会出现此信息
      
     检测程序包的来源合法性和数据完整性:    
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 或从光盘导入密钥 安装程 序包时就会自动对程序包进行检测;
       手动验证程序的合法性和完整性(需先导入密钥): rpm  -K PACKAGE_FILE
去除密钥:
~]# rpm -qa gpg-pubkey* 查询密钥
gpg-pubkey-c105b9de-4e0fd3a3
~]# rpm -e gpg-pubkey-c105b9de-4e0fd3a3
~]# rpm -qa gpg-pubkey* 再次查询则无任何显示
⑥数据库重建 rpm {--initdb|--rebuilddb}[--dbpath DIRECTORY] [--root DIRECTORY]
           rpm的数据库位置位于/var/lib/rpm/,所有已经安装过的程序包在该数据库              中都会有记录
       选项:
           --initdb  初始化数据库,当没有数据库时,可用新建个rpm数据库,当
                前存在有数据库时,则不执行任何操作
           --rebuilddb  根据已安装数据包头部信息进行重新构建
    
         
                        
                    
                       
                   
          
                    
                    
        
            
            
            
标签:rpm
原文地址:http://yy0430.blog.51cto.com/11619642/1784618