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工具在背后做了以下工作:
- 检查系统是否满足安装条件
- 找到rpm包中所有文件的安放路径
- 在系统上安装相关文件
- 将已安装的包信息加入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