在Linux平台上,众所周知的,我们安装软件包,无外乎两种:一种是以RPM的方式直接安装,这是一种已经编译完成的安装包;另外一种就是源代码安装,这是一种将压缩包解压后,根据自己的环境,加以定制的安装的方式。RPM安装相比源代码安装,更加的方便、快捷,而源代码能根据自己的环境,编译,得到自己想要的功能,这里,我们只介绍RPM包的相关情况:


   RPM:RPM is Package Manager,原名并不是这个,但是,现在的RPM已经成为整个Linux界公认的行业标准了。凡事有一定的规范性,对于RPM,它的命名也是有法可寻。

1、RPM的命名格式:name-version-release.arch.rpm

      name:这里指的是对应软件的名称,比如httpd,我们的apache服务

      version:这里的版本主要指的是对应的源代码的版本号

      release:这个是这个RPM的修订的次数,发布版本,与源代码的版本号无关

      arch:这个是它所支持的硬件平台,有x86_64,i386,ppc,noarch等


 这其中的version有三部分组成:主版本号、次版本号、发布版本号

    例子:httpd-2.2.15-29.el6.centos.x86_64.rpm

    上面,我们以httpd服务为例,它的name就是httpd,version为2.2.15,release为29.e16,这里,还包含了此包使用的系统,即centos,arch就是x86_64。

     这么解释的话,不知道大家有没有一个具体的概念了?

   

2、RPM的打包功能及其分包机制:

   核心包,即主包,它的命名与源程序一样(不是源代码啊)

     例子:php-5.3.3-26.el6.x86_64.rpm,上面提到的httpd也是核心包

   子包:它在name的后面有个子包名

     例子:php-mysql-5.3.3-26.el6.x86_64.rpm,这里的mysql就是子包名


3、RPM包管理器的常见使用环境:

    a、安装程序包:rpm [option] package_path

        -i:安装,即install

        -v:显示详细信息,这里也可以使用-vv和-vvv,信息更加详细

        -h:使用"#"来显示安装的进度

       rpm -ivh httpd-2.2.15-29.el6.centos.x86_64.rpm

     配合上面-ivh使用的选项:

        --test:这里仅做测试,并不是实际去执行安装

       rpm -ivh --test httpd-2.2.15-29.el6.centos.x86_64.rpm

        

        --nodeps:这里是在有依赖包的时候,你不想将依赖包安上,但是,这样做的话,

                会造成包可能无法运行,下面这种情况就是需要依赖包:

        wKioL1PLJNuh1FGXAABHLUZKUU8663.jpg

       rpm -ivh  --nodeps php-pecl-apc-3.1.9-2.el6.x86_64.rpm

        

        --replapacpkgs:看选项,我们就知道,这是重新安装替换,但是,配置文件不会被重新安装

       rpm -ivh --replacepkgs httpd-2.2.15-29.el6.centos.x86_64.rpm

        wKioL1PLJ4qSw3ojAAEEK0foMVI325.jpg

     b、卸载程序包

        rpm [option] package_name

        -e:卸载选项,意思为erase,擦除

        --nodeps,卸载时,忽略它所依赖的包,只卸载当前包

       rpm -e httpd --nodeps

       wKiom1PLKQOC18-bAADyRGP15XI415.jpg


    c、升级版本程序包

        I、升级或安装

             rpm  -Uvh package_path

         rpm -Uvh httpd-2.2.15-29.el6.centos.x86_64.rpm

        II、纯升级

             rpm  -Fvh package_path

         rpm -Fvh httpd-2.2.15-29.el6.centos.x86_64.rpm

        III、强制升级

             rpm  --force package_path

         rpm -force httpd-2.2.15-29.el6.centos.x86_64.rpm

     

    d、查询操作

        已安装的包:

        I、查询某个包是否安装

            rpm -q package_name

        rpm -q httpd

        II、查询所有已经安装的包

            rpm -qa     

                后面可以跟grep的正则表达式

        rpm -qa | grep '^http'

        III、查询已安装的包描述信息

            rpm -qi package_name

        rpm -qi php  #查看php这个包的详细信息

        IV、查询某包生成了哪些文件

            rpm -ql package_name

        rpm -qi mysql #查看mysql这个包生成了哪些文件

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

            rpm -ql package_name

        rpm -qi httpd #查看httpd包安装后生成了哪些配置文件

         VI、查询程序包的相关脚本

            rpm -q --scripts package_name

        rpm -q --scripts httpd

            一般情况下,会有四个脚本,分别是,安装前、安装后、卸载前、卸载后

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

            rpm -qf  file_path

        rpm -qf /etc/httpd/conf/httpd.conf #我们查看httpd.conf这个文件是由哪个包生成的

       

      对未安装的包执行查询:-p选项的使用

         语法:rpm [option] package_path

         I、查询这个包安装后的详细

            rpm -qpi package_path

        rpm -qpi mysql-5.1.71-1.el6.x86_64.rpm #查看mysql包安装后,会生成哪些信息

         II、查询这个包安装后生成的文件

            rpm -qpl package_path

        rpm -qpl mysql-5.1.71-1.el6.x86_64.rpm

         III、查询这个包安装后生成的配置文件

            rpm -qpc package_path

        rpm -qpc mysql-5.1.71-1.el6.x86_64.rpm

         IV、查询这个包安装后生成的帮助文件

            rpm -qpd package_path

        rpm -qpd mysql-5.1.71-1.el6.x86_64.rpm

        

        检验某个包安装后,其文件属性是否发生了改变

        rpm  -V package_name   

        rpm -V httpd #查看httpd的文件属性是否发生改变


 4、RPM包的获取途径:

    如果你在生成系统上装了一个RPM包,但是,是人家改过的,这样的程序,谁能放心,所以,RPM的安全可靠性就显得尤为重要了

    a、到项目的官网去下载源代码或是安装包

    b、从发行的光盘上去获取安装包

    c、从国内知名的源上获取

        比如:http://mirrors.sohu.com

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

        比如:http://rpm.pbone.net

    e、可靠的途径:EPEL,fedora就有EPEL的源


5、对于包的本身,我们也要进行验证,即要获得发行商的公钥

    在获得公钥的基础上,我们导入公钥

    rpm --import  PUBKEY

     然后,在安装过程中,程序安装会自动提醒你的  


   RPM包是一个非常方便、高效的程序安装方式,我们应该多多加以学习,同时,一定要保证我们的包的来源,在企业生产系统上,如果是被人改过的包,那将可能会是个灾难