Linux原本只是一个kernel,但是为什么我们今天用的linux系统,会有很强大的功能呢,这是因为在kernel的基础上,发行商给我们安装了很多软件包,使linux系统具有了丰富的功能。
   Linux界软件安装的的两大主流是:RPM和dpkg。dpkg最早是由Debian Linux社区开发的,RPM(Redhat Package Manager)是由redhat公司开发的,而包括Fedora,CentOS,SuSE等大的发行商都使用RPM。我们知道最初那些软件包都是程序员用C语言或其他语言写出来,需要经过编译才能在我们的PC机的Linux系统上运行,如果我们每用到一个程序,就需要下载源码包,然后自己编译(有的大程序编译时间是非常长的),安装,并且大多时候会出现依赖性的问题,这样非常有局限性,并且非常麻烦。而RPM解决了我们这个问题,它是已经编译完成的程序和设置文件打包为RPM格式的包,并且软件包中会提供软件包依赖属性等的相关详细信息。RPM包用rpm命令安装的时候首先会检测它安装所要依赖的包是否已安装。如果,这个软件包所依赖的软件包不存在,则会停止安装,给出提示信息让安装其所依赖的包。如果已经安装,则正常安装,并在安装的时候将该软件的信息整个写入RPM的数据库中,便于未来的查询,验证和安装。

    RPM和rpm一样吗?是不是看的有点晕呀!RPM全称是Redhat Package Manager即redhat软件包管理工具,而rpm是RPM的中的一个命令,只有root用户才能使用,用于软件包的安装,查询和升级等。

  
    软件包一般由四个部分组成:
    1,二进制文件  一般放

在:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin中
    2,配置文件    一般放在:/etc,/usr/local/etc中
    3,库文件      一般放在:/lib,/usr/lib,/usr/local/lib中
    4,文档        一般放在/usr/share/docs,/usr/share/man中

    软件包的安装方式有两种:
    1,手动编译安装源代码包
    2,直接安装二进制格式的软件包
    这里我们只说第二种,并且是能用rpm命令安装的RPM包。

    rpm包的格式为:
    name-version-release.arch.rmp
    name:就是软件包的名字
    version:软件包的版本号,一般由三位组成,分别为主版本号-次版本号-修正号。
    release:发行号
    arch:支持的硬件平台,一般有:
    i386:支持几乎所有的x86的CPU平台
    i586:如P-I MMX CPU及AMD的K5,K6系列等。
    i686:P-II以后的Intel系列
    X86_64:支持64位的cpu,如Intel core2以上及AMD的Athlon64以后的cpu
    noarch:表示没有硬件平台的限制;


    RPM工具中的rpm命令:
    (注意:
      1,下面内容我们以:httpd-2.2.3-31.el5.i386.rpm为例,有的选项只用包的名字就行了,即这个包中的httpd,全格式反而错误;
      2,指定这个包文件时必须是绝对路径,由于我已经切换到光盘中Server目录中,而httpd这个文件在这个目录中,故不需要指定路径了)
    rpm常用选项有:
    -v 执行的时候显示详细信息
    -h 执行的时候显示进度条
    1,安装
    rpm
    -i  表示安装
    -nodeps 忽略包之间的依赖关系安装,即使安装成功,有可能不能用
    --force 强行安装,即使安装成功,有可能不能用
    例:rpm -ivh httpd-2.2.3-31.el5.i386.rpm (必须是全格式的包名)
   
    2,卸载
    rpm
    -e 卸载
    -nodeps 忽略依赖关系强行卸载
    --force 强制卸载
    例:rpm -evh httpd
 
    3,升级
    rpm
    -U 如果要升级的老版本不存在,则重新安装这个新包;如果存在,则对此进行升级
    -F 只有要升级的老版本存在才升级
    例:rpm -Uvh httpd-2.2.3-31.el5.i386.rpm(必须是全格式的包名)

    4,查询
    rpm
    -q 查询软件包(查询是支持golobing方式的文件名通配)
    例:rpm -q httpd 查询这个软件包是否安装

    -qa 查询所有已经安装的包
 
    -qi 显示指定软件包的摘要信息(例如软件包的安装时间,编译时间,大小等信息)
    例:rpm -qi httpd


    -qR 显示已安装的软件包的依赖包
    例:rpm -qR httpd-2.2.3-31.el5.i386.rpm


    -qRp 显示本地rpm软件包的依赖包
    例:rpm -qRp httpd-2.2.3-31.el5.i386.rpm

  
    -ql 显示这个软件包安装之后生成了哪些文件
    例:rpm -ql httpd

    -qc 显示这个软件包安装之后生成了哪些配置文件
    例:rpm -qc httpd

    -qd 显示这个软件包安装之后生成了哪些文档文件
    例:rpm -qd http
   
    -q --scripts  显示这个软件包安装时所执行的脚本
    例:rpm -q --scripts httpd

    -qf filename 显示这个文件由哪个软件包生成的
    例:rpm -qf /etc/profile

    -q --changelog 显示这个软件包每次制作都添加了哪些功能
    例:rpm -q --changelog httpd

    -p 查询一个未安装的本地存在的rpm包的相关信息
    例:rpm -qpl httpd-2.2.3-31.el5.i386.rpm  rpm -qpR httpd-2.2.3-31.el5.i386.rpm



    5,校验
    rpm
    -V 校验这个软件包所生成的文件是否被改动过,如果被改动就会显示出来
    -Va 列出系统上所有可能被修改过的文件

RPM及其rpm命令详解_rpm

    如图所示:
    红线划的信息依次为:(如果这一项没有改动,则用“.”显示)
    S:文件的大小是否被改变
    M:文件的类型或文件的属性(rwx)是否改变
    5:MD5码的内容已经修改过
    D:设备的主次代号已经改变
    L:链接路径已经改变
    U:文件的所有者发生改变
    G:文件的属组已经改变
    T:文件的修改时间变化

    黄线划的信息是指定文件的类型,有:
    c:表示此文件为配置文件
    d:表示此文件为配置文件
    g:“鬼”文件,即该文件不被某个软件包所包含
    l:表示此文件为授权文件
    r:表示此文件为自述文件  

    蓝线表示这个软件包生成的被改变动过的文件