RPM(Redhat Package Manager)的缩写,本意为:Red Hat 软件包管理,目前已经成为Linux工业标准。现在OpenLinux/SUSE/等分发版本的linux都有采用。


RPM包里面都包含什么?

        里面包含可执行的二进制程序,这个程序和windows的软件包中的.exe文件类似是可执行的;

        RPM包中还包括程序运行时所需要的文件,这也是和windows的软件包类似;




包管理器的功能:

    打包、安装、卸载、升级、校验、数据库管理等




包的前端工具:

    dpkg --> apt-get (ubuntu)

    rpm -->yum(增强型前端工具),yum(Yellow Dog)



RPM包管理的用途:

1、可以安装、删除、升级和管理软件;当然也支持在线安装和升级软件;

2、通过RPM包管理能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪个软件包;

3、可以在查询系统中的软件包是否安装以及其版本;

4、作为开发者可以把自己的程序打包为RPM包发布;

5、软件包签名GPG和MD5的导入,验证和签名发布;

6、依赖性检查,查看是否有软件包由于不兼容而扰乱了系统;



RPM包的使用权限:

RPM软件的安装、删除、更新只有root权限才能使用;对于查询功能任何用户都可以进行操作;如果普通用户拥有安装目录的权限,也可以进行安装等操作;




RPM包的命名格式:

name-version-relase.arch.rpm

name:软件包名称

verion:带有主,次和修订的软件包版本

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

arch:适用于的硬件平台

    x86:i386,i486,i586,i686等;

    x86_64:x86_64

    powerpc:ppc

    noarch:依赖于虚拟机

例如:bash-4.2.3-3.centos5.x86_64.rpm




RPM分包机制:

核心包:包含程序最常用的功能

httpd-2.2.15-39.el6.centos.x86_64.rpm

开发包:包含开发所需要的库模块

httpd-devel-2.2.15-39.el6.centos.x86_64.rpm

帮助文档:

httpd-manual-2.2.15-39.el6.centos.noarch.rpm

工具包:

httpd-tools-2.2.15-39.el6.centos.x86_64.rpm




RPM命令参数:

-e   卸载rpm包
    -q   查询已安装的软件信息
    -i    安装rpm包
    -u   升级rpm包
    -c   显示所有配置文件
    -d   显示所有文档文件
    -h   显示安装进度
    -l    列出软件包中的文件
    -a   显示出文件状态
    -p   查询/校验一个软件包文件
    -v   显示详细的处理信息
    --replacepkgs       重新安装rpm包
    --justdb                升级数据库,不修改文件系统
    --percent              在软件包安装时输出百分比
    --version              显示版本信息
    --dump                显示基本文件信息
    --nomd5             不验证文件的md5支持
    --nofiles              不验证软件包中的文件
    --whatrequire      查询/验证需要的一个依赖性的软件包
    --whatprovides    查询/验证提供一个依赖性的软件包
    --test                   仅做测试,不真正意义上的安装


RPM安装程序包:
    rpm -i zsh-4.3.10-7.el6.x86_64.rpm
常用组合选项:-ivh 
     # rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm 
        Preparing...                ########################################### [100%]
        1:zsh                    ########################################### [100%]

如果依赖于其它包:
    1、解决依赖关系
    2、忽略依赖关系
            能安装上,但有可能无法运行;
            --nodeps     

卸载程序包:
      #rpm -e zsh #只需哟包名,不需要版本号
如果被其它包所依赖:
    1、将依赖于此包的所有包一并卸载
    2、忽略依赖关系
            能卸载,但依赖于此包程序包可能会运行不正常;
            --nodeps
如果包的配置文件安装后曾经被改动过,卸载的时候,此文件将不会卸载,而是被重命名并保留,例如
 warning: /etc/zprofile saved as /etc/zprofile.rpmsave

升级程序包:
新版本替换老版本
rpm [option] /path/to/package_file
    1、升级或安装
            -Uvh
    2、纯升级
            -Fvh
    3、--force:强制升级
注意:不应该对内核执行升级操作,而是安装系统允许多内核并存


查询操作:
1、查询某包是否安装
    rpm  -q

    # rpm -q zsh
       zsh-4.3.10-7.el6.x86_64

2、查询所有已经安装的包
  rpm -qa

  # rpm -qa
    mozilla-filesystem-1.9-5.1.el6.x86_64
    openssh-server-5.3p1-104.el6_6.1.x86_64
    basesystem-10.0-4.el6.noarch
    glib-networking-2.28.6.1-2.2.el6.x86_64
    createrepo-0.9.9-18.el6.noarch
    ............

3、查询包的描述信息
    rpm -qi package_name

   # rpm -qi zsh
Name        : zsh                          Relocations: (not relocatable)
Version     : 4.3.10                            Vendor: CentOS
Release     : 7.el6                         Build Date: Mon Nov 25 01:40:59 2013
Install Date: Mon Jan 19 22:32:22 2015         Build Host: c6b9.bsys.dev.centos.org
Group       : System Environment/Shells     Source RPM: zsh-4.3.10-7.el6.src.rpm
Size        : 5009102                          License: BSD
Signature   : RSA/SHA1, Mon Nov 25 03:33:46 2013, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://zsh.sunsite.dk/
Summary     : A powerful interactive shell
Description :
The zsh shell is a command interpreter usable as an interactive login
shell and as a shell script command processor.  Zsh resembles the ksh
shell (the Korn shell), but includes many enhancements.  Zsh supports
command line editing, built-in spelling correction, programmable
command completion, shell functions (with autoloading), a history
mechanism, and more.

4、查询某包安装生成了哪些文件
     rpm -ql package_name

# rpm -ql zsh
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
...........

(1)查询某包安装生成了哪些配置文件
   rpm -qc package_name  

# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc

(2)查询某包安装生成了哪些帮助文件
    rpm -qd package_name

# rpm -qd zsh
/usr/share/doc/zsh-4.3.10/BUGS
/usr/share/doc/zsh-4.3.10/CONTRIBUTORS
/usr/share/doc/zsh-4.3.10/FAQ
/usr/share/doc/zsh-4.3.10/FEATURES
/usr/share/doc/zsh-4.3.10/LICENCE
/usr/share/doc/zsh-4.3.10/MACHINES
...........

(3)查询程序包的相关脚本
    rpm -q --scripts package_name

# rpm -q --scripts zsh
postinstall scriptlet (using /bin/sh):
if [ ! -f /etc/shells ] ; then
    echo "/bin/zsh" > /etc/shells
else
    grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells
fi
...........

5、查询某文件时由哪个包安装生成的
    rpm -qf /path/to/some_file   
校验:
    用于检查包安装生成的文件属性是否发生变化
   rpm -V package_name
        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包来源合法性及完整性检验:

前提:在当前系统上导入包的制作者的公钥
   导入:
    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

数据库重建:
数据库目录:/var/lib/rpm

重建:
rpm --initdb:初始化
如果事先没有库,会新建一个;如果有,则不新建;

rpm --rebuilddb: 重建
直接重建,覆盖原有的数据库


转载于:https://blog.51cto.com/tengq/1930181