代码改变世界

rpm包管理

2012-07-22 01:29  bangerlee  阅读(1735)  评论(0编辑  收藏  举报

rpm是Red Hat Package Manager的简称,是red hat、suse等linux发行版自带的包管理工具,其用于安装、卸载、升级、查询以及校验rpm包。下面我们以一个procps rpm包为例子,介绍rpm的具体用法。

 

安装rpm包(rpm -ivh)

rpm包的名称一般由包名、版本、子版本以及所支持的架构名这基本分组成。

例如,对于procps-3.2.7-151.11.1.x86_64.rpm这个rpm包:

  • procps - 包名
  • 3.2.7 - 版本号
  • 151.11.1 - 小版本号
  • X86_64- 架构

当我们安装一个rpm包时,rpm工具在背后做了以下工作:

  1. 检查系统是否满足安装条件
  2. 找到rpm包中所有文件的安放路径
  3. 在系统上安装相关文件
  4. 将已安装的包信息加入rpm包数据库中

以下rpm命令对procps包进行安装:

linux # rpm -ivh procps-3.2.7-151.11.1.x86_64.rpm
Preparing...                ########################################### [100%]
        file /bin/ps from install of procps-3.2.7-151.11.1.x86_64 conflicts with file from package procps-3.2.7-151.8.31.x86_64
        file /usr/bin/free from install of procps-3.2.7-151.11.1.x86_64 conflicts with file from package procps-3.2.7-151.8.31.x86_64
        ……

其中-i选项表示进行包安装,-v选项指示输出详细安装过程,-h选项指示以进度条的形式显示rpm的解包过程。使用-vh选项,安装过程显示更加明晰。

 

卸载rpm包(rpm -e)

使用-e选项卸载rpm包,当有上层包依赖于卸载包时,需先卸载上层的rpm包。卸载完成后可使用rpm -qa查询是否卸载成功:

linux # rpm -ev procps

 

升级rpm包(rpm -Uvh)

升级rpm包与安装rpm包类型,但升级时rpm首先将旧版本的rpm删除。如果指定的升级包之前并没有安装,rpm -Uvh命令将安装该包:

linux # rpm -Uvh procps-3.2.7-151.11.1.x86_64.rpm
Preparing...                ########################################### [100%]
   1:procps                 ########################################### [100%]

 

查询所有rpm包(rpm -qa)

以下命令将查询系统上已安装的所有rpm包:

linux # rpm –qa
gpg-pubkey-1d061a62-4bd70bfa
release-notes-sles-11.1.0.19-0.2.1
gtk2-lang-2.18.9-0.4.1
……

-q选项指示进行查询操作,-a指示对所有已安装的包查询。

结合grep,我们可以查询某个rpm包是否已经安装:

linux # rpm -qa| grep procps
procps-3.2.7-151.8.31

 

查询指定名称的包(rpm -q)

以上查询某个已安装的rpm是通过搜寻整个rpm包列表,当我们预先知道包名时,可以使用以下方法进行查询:

linux # rpm -q procps
procps-3.2.7-151.8.31

若提供的是不完全的包名,将查不到相关包:

linux # rpm -q procp
package procp is not installed

 

查询包信息(rpm -qi)

对于已安装的rpm包,我们可以使用rpm -qi命令查询相关信息:

linux # rpm -qi procps
Name        : procps                       Relocations: (not relocatable)
Version     : 3.2.7                             Vendor: SUSE LINUX Products GmbH, Nuernberg, Germany
Release     : 151.8.31                      Build Date: Wed May  5 22:02:47 2010
Install Date: Thu Apr 12 03:43:00 2012         Build Host: brahms
Group       : System/Monitoring             Source RPM: procps-3.2.7-151.8.31.src.rpm
Size        : 610312                           License: GPL v2 or later; LGPL v2.1 or later
Signature   : RSA/8, Wed May  5 22:03:01 2010, Key ID e3a5c360307e3d54
Packager    : http://bugs.opensuse.org
URL         : http://procps.sf.net
Summary     : ps utilities for /proc
Description :
The procps package contains a set of system utilities that provide
system information.
⋯⋯

对于尚未安装的rpm包,我们可以使用rpm -qip,后接完整的包名进行包信息查询。

 

查询特定rpm包的内容(rpm -qlp)

使用以下命令,可以查询某个rpm包所包含的内容:

linux # rpm -qlp procps-3.2.7-151.11.1.x86_64.rpm
/bin/ps
/etc/init.d/boot.sysctl
/etc/sysctl.conf
/etc/xinetd.d/systat
……

 

查询特定文件属于哪个rpm包(rpm -qf)

反过来,我们可以查某个文件属于哪个rpm包:

linux # rpm -qf /bin/ps
procps-3.2.7-151.8.31

 

自定义查询结果显示格式(rpm --queryformat)

--queryformat选项允许我们自定义rpm查询结果的输出格式:

linux # rpm -q procps --queryformat '%{name}-%{version}  %{size}\n'
procps-3.2.7  610312

 

查询包间依赖关系(rpm -qRp)

使用可以命令查询rpm包间的依赖关系:

linux # rpm -qRp procps-3.2.7-151.11.1.x86_64.rpm
fillup
coreutils
grep
……

 

校验特定rpm包(rpm -V)

有时一些文件丢失或文件权限被修改,导致相关工具不可用,这时我们可以使用rpm的校验功能检查哪些文件丢失或被修改了。-V选项把使用中的rpm文件与rpm数据库中的信息进行对比,进而显示文件变更信息。

 

针对整改rpm包,我们可以这样校验:

linux # rpm -Vp procps-3.2.7-151.11.1.x86_64.rpm
S.5....T  c /etc/sysctl.conf

 

对于rpm包中的某个文件,可以这样校验:

linux # rpm -Vf /bin/ps
S.5....T  c /etc/sysctl.conf

 

对于所有已安装的rpm包,可以这样校验:

linux # rpm -Va
S.5....T    /usr/share/zoneinfo/Asia/Karachi
S.5....T    /usr/share/zoneinfo/posix/Asia/Karachi
SM5....T  c /etc/init.d/nfsserver
……

 

以上输出” S.5....T”共8个标志位,指示了文件变更信息,从左到右,各标志位含义如下:

  • S: 指示文件大小变更
  • M: 指示文件权限、文件类型变更
  • 5: 指示MD5值变更
  • D: 指示主/备设备号变更
  • L: 指示连接变更
  • U: 指示属主变更
  • G: 指示属组变更
  • T: 指示修改时间变更

 

若相关文件被移走或被删除,则有如下检查结果:

linux # rpm -Vp procps-3.2.7-151.11.1.x86_64.rpm
missing   c /etc/sysctl.conf

 

Reference: RPM Command: 15 Examples to Install, Uninstall, Upgrade, Query RPM Packages