由于用户大部分都不是程序员,程序安装维护等都非常困难,RPM就是在这种情况下被开发出来的。

RPM 是Linux上的一款非常强大的软件包管理工具,它主要负责程序的安装,升级,卸载,更新,查询,校验等操作。但是它有一个缺陷,就是程序之间存在依赖性,要想安装一个程序有时必须得安装另外一个程序甚至多个程序,安装非常繁琐。于是就出现了另一种软件包管理工具。这里暂不做介绍。

RPM的安装

rpm [options] PACKAGE_FILE ...

   -i:表示安装

   -v:显示详细的安装过程

   -h:表示安装进度,1个#表示2%

   --nodeps:安装过程中可能依赖其他包,该选项表示略过依赖的包不安装

   --test:不执行真正的安装过程,而仅报告依赖关系及冲突信息等

   --replacepkgs:覆盖安装:重新安装并覆盖原有的文件

   --force:  强制安装:

例如:以安装zsh软件包为例

[root@localhost ~]# rpm -ivh /yum/iso/zsh-4.3.10-7.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]


     

RPM的升级

rpm [options] PACKAGE_NAME...

   -U:表示升级,若有旧版本的包也安装

   -F:表示升级,若有旧版本的包则推出不安装

      --oldpackage:降级到旧版本

   -v:显示详细的安装过程

   -h:表示安装进度

更新程序同安装一样,这里不再详解。

 

 RPM的卸载

 rpm [options] PACKAGE_NAME...

   -e:卸载已安装的包

   --nodeps:忽略依赖关系

   --test:测试卸载

   --allmatches:如果一个程序包同时安装多个版本,则此选项一次全部卸载之



注意:

1如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会被删除,而是被重命名(加后缀.rpmsave)后留存。

2 安装时要知道安装包的绝对路径,卸载或升级时只要指定包名即可。

 

RPM的查询

   -q  PACKAGE_NAME 

            查询该软件包是否安装 

例如:  
[root@localhost ~]# rpm -q zsh
               zsh-4.3.10-7.el6.x86_64


   -qa  查询所有已安装的软件包

   -qc PACKAGE_NAME 

            查询该软件包安装生成的配置文件


例如:
[root@localhost ~]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc



   -qd  PACKAGE_NAME 

            查询该软件包安装生成的帮助文件

例如:
[root@localhost ~]# 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
/usr/share/doc/zsh-4.3.10/NEWS
/usr/share/doc/zsh-4.3.10/README
/usr/share/doc/zsh-4.3.10/completion-style-guide
/usr/share/doc/zsh-4.3.10/zsh-development-guide
/usr/share/doc/zsh-4.3.10/zshprompt.pl
/usr/share/info/zsh.info-1.gz
/usr/share/info/zsh.info-2.gz
/usr/share/info/zsh.info-3.gz
/usr/share/info/zsh.info-4.gz
/usr/share/info/zsh.info-5.gz
/usr/share/info/zsh.info.gz
/usr/share/man/man1/zsh.1.gz
/usr/share/man/man1/zshall.1.gz
/usr/share/man/man1/zshbuiltins.1.gz
/usr/share/man/man1/zshcalsys.1.gz
/usr/share/man/man1/zshcompctl.1.gz
/usr/share/man/man1/zshcompsys.1.gz
/usr/share/man/man1/zshcompwid.1.gz
/usr/share/man/man1/zshcontrib.1.gz
/usr/share/man/man1/zshexpn.1.gz
/usr/share/man/man1/zshmisc.1.gz
/usr/share/man/man1/zshmodules.1.gz
/usr/share/man/man1/zshoptions.1.gz
/usr/share/man/man1/zshparam.1.gz
/usr/share/man/man1/zshroadmap.1.gz
/usr/share/man/man1/zshtcpsys.1.gz
/usr/share/man/man1/zshzftpsys.1.gz
/usr/share/man/man1/zshzle.1.gz


   -qi PACKAGE_NAME



   -ql PACKAGE_NAME

            查询该软件包生成的各文件路径
例如:
[root@localhost ~]# rpm -ql zsh
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
/usr/lib64/zsh
/usr/lib64/zsh/4.3.10
/usr/lib64/zsh/4.3.10/zsh
/usr/lib64/zsh/4.3.10/zsh/attr.so
/usr/lib64/zsh/4.3.10/zsh/cap.so
/usr/lib64/zsh/4.3.10/zsh/clone.so
/usr/lib64/zsh/4.3.10/zsh/compctl.so
/usr/lib64/zsh/4.3.10/zsh/complete.so




   -qf PACKAGE_FILE

            查询该文件是由那个软件包安装生成的

例如:/bin/ls是由那个软件包安装
[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.4-37.el6.x86_64



   -q --changelog PACKAGE_NAME

            查看某包制作时随版本变化的changelog信息

   -q --requires PACKAGE_NAME

            查询该安装包依赖的功能

   -q --provides PACKAGE_NAME

            查询该安装包提供的功能

   -q --scripts PACKAGE_NAME

            查询该软件包安装卸载时执行的脚本


若要查询未安装的包的信息则要加-p选项,其他同上。 


校验

   rpm –V PACKAGE_NAME...

例如:我把、/etc/zshrc中的#注释后结果如下
[root@localhost ~]# rpm  -V zsh
S.5....T.  c /etc/zshrc




验证来源合法性和完整性

   首先要导入软件包下载站点提供的公钥 rpm–import URL

   接下来验证来源合法性和完整性

   rpm-K [--nosignature] [--nodigest] PACKAGE_FILE ...

   其中:--nosignature表示不做签名认证,即不做合法性验证

   --nodigest表示不对软件包的完整性做验证

        

        rpm管理器数据库:

                    位于 /var/lib/rpm

        有两个选项:

                      

                        --initdb: 初始化数据库,只有数据库不存在时才创建


                        --rebuilddb: 不管数据存不存在都会直接重建此库