天天看点

RPM及其rpm命令详解

    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,卸载

    -e 卸载

    -nodeps 忽略依赖关系强行卸载

    --force 强制卸载

    例:rpm -evh httpd 

    3,升级

    -U 如果要升级的老版本不存在,则重新安装这个新包;如果存在,则对此进行升级

    -F 只有要升级的老版本存在才升级

    例:rpm -Uvh httpd-2.2.3-31.el5.i386.rpm(必须是全格式的包名)

    4,查询

    -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 列出系统上所有可能被修改过的文件

<a href="http://blog.51cto.com/attachment/201202/131726758.jpg" target="_blank"></a>

    如图所示:

    红线划的信息依次为:(如果这一项没有改动,则用&amp;ldquo;.&amp;rdquo;显示)

    S:文件的大小是否被改变

    M:文件的类型或文件的属性(rwx)是否改变

    5:MD5码的内容已经修改过

    D:设备的主次代号已经改变

    L:链接路径已经改变

    U:文件的所有者发生改变

    G:文件的属组已经改变

    T:文件的修改时间变化

    黄线划的信息是指定文件的类型,有:

    c:表示此文件为配置文件

    d:表示此文件为配置文件

    g:&amp;ldquo;鬼&amp;rdquo;文件,即该文件不被某个软件包所包含

    l:表示此文件为授权文件 

    r:表示此文件为自述文件  

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

本文转自 leejia1989 51CTO博客,原文链接:http://blog.51cto.com/leejia/787626,如需转载请自行联系原作者

继续阅读