RPM 包管理命令的使用

安装

rpm {-i|--install} [install-options] PACKAGE_FILE1..

安装时可以使用 -h 显式安装进度,使用 -v 显示详细信息。

[root@localhost ~]# rpm -ivh httpd-2.2.15-39.el6.centos.x86_64.rpm
Preparing...                ########################################### [100%]
   1:httpd                  ########################################### [100%]

使用 --test 可以用于测试安装是否能够成功,而不实际安装。

在安装过程中,可能遇到软件包的依赖问题,而需要先安装其他软件包,这时可以使用 --nodeps 忽略依赖强制安装,但是这样安装的软件包通常也会因为依赖缺失而无法正常工作。

如果需要重新安装并覆盖原有的文件,可以使用 --replacepkgs 选项。

使用 --force 可以进行强制覆盖安装,它等同于--replacepkgs, --replacefiles, 和 --oldpackage。

升级

升级或安装

如果不知道一个软件包是否已经安装,并希望如果已经安装那么升级次软件包,使用 -U 选项。

rpm{-U|--upgrade}[install-options]PACKAGE_FILE...

如果仅仅希望升级软件包,使用 -F 选项

rpm{-F|--freshen}[install-options]PACKAGE_FILE...

升级软件包和安装软件包一样,可以使用 --test,--nodeps,--force 等选项。

示例:安装并升级 zsh 软件包

[root@localhost rpm]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]
[root@localhost rpm]# rpm -Uvh zsh-4.3.10-9.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]

如果想要将软件包降级到旧版本,使用 --oldpackage 选项

[root@localhost rpm]# rpm -Uvh --oldpackage zsh-4.3.10-7.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]

在升级软件包时,原来软件包的配置文件可能已经被修改,升级时,新版本的文件不会将老版本的配置文件覆盖,而是将新版本的配置文件加上 .rpmnew 后缀后保存。

注意:内核也是软件包,但是不要直接对内核进行升级(如果新的内核有兼容问题启动不了而旧内核又被覆盖就悲剧了),因为 Linux 允许多内核共存,所以可以直接安装多个不同版本内核。

卸载

rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...

通常使用 rpm -e PACKAGE_ANEM 即可简单卸载一个软件包。

使用 --nodeps 忽略依赖关系。--test 测试卸载。--allmatches 表示如果一个程序包同时安装多个版本,则次选项一次全部卸载之。

如果卸载正常,不会输出任何信息。

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

查询:

查询使用 -q 选项,可以检查安装的所有包,还可以查看某包的详细信息。

rpm {-q|--query} [select-options] [query-options]

查询某包是否已经安装

rpm -q PACKAGE_NAME...

如:

[root@localhost rpm]#rpm-q zsh zsh-4.3.10-9.el6.x86_64

查询安装的所有包

rpm -qa

查询未安装包的信息

在 -q 同时使用 -p 选项

注意:查询未安装包的信息指定的是 RPM 包的文件名而不是某个包的软件名。

查询选项

查询某包的简要说明信息

rpm -qi PACKAGE_NAME

如:

[root@localhost rpm]# rpm -qi zsh
Name        : zsh                          Relocations: (not relocatable)
Version     : 4.3.10                            Vendor: CentOS
Release     : 9.el6                         Build Date: Wed 05 Nov 2014 07:20:52 PM CST
Install Date: Sat 11 Apr 2015 11:37:12 PM CST      Build Host: c6b8.bsys.dev.centos.org
Group       : System Environment/Shells     Source RPM: zsh-4.3.10-9.el6.src.rpm
Size        : 5009102                          License: BSD
Signature   : RSA/SHA1, Wed 05 Nov 2014 08:05:42 PM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem 
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.

这里显式了 zsh 这个包的各类元信息,如名字,版本,发行商,打包作者,描述信息等。

查询软件包安装的文件列表

rpm -ql PACKAGE_NAME

如:

[root@localhost rpm]# 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/share/zsh/4.3.10/functions/zstyle+
/usr/share/zsh/4.3.10/scripts
/usr/share/zsh/4.3.10/scripts/newuser
/usr/share/zsh/site-functions

使用 rpm -qc PACKAGE_NAME 可以查看软件包安装后生成的所有配置文件。

使用 rpm -qd PACKAGE_NAME 可以查看软件包安装后生成的所有说明文件和帮助文件。

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

rpm -q --changelog PACKAGE_NAME

查看软件包提供的 capabilities (即输出给其他软件包的依赖)

rpm -q --provides PACKAGE_NAME

查看软件包所需的依赖

rpm -q --requires PACKAGE_NAME

查看软件包安装或卸载时执行的脚本

rpm -q --scripts PACKAGE_NAME

如:

[root@localhost rpm]# 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

if [ -f /usr/share/info/zsh.info.gz ]; then
# This is needed so that --excludedocs works.
/sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir \
  --entry="* zsh: (zsh).            An enhanced bourne shell."
fi

:
preuninstall scriptlet (using /bin/sh):
if [ "$1" = 0 ] ; then
    if [ -f /usr/share/info/zsh.info.gz ]; then
    # This is needed so that --excludedocs works.
    /sbin/install-info --delete /usr/share/info/zsh.info.gz /usr/share/ info/dir \
      --entry="* zsh: (zsh).            An enhanced bourne shell."
    fi
fi
:
postuninstall scriptlet (using /bin/sh):
if [ "$1" = 0 ] ; then
    if [ -f /etc/shells ] ; then
        TmpFile=`/bin/mktemp /tmp/.zshrpmXXXXXX`
        grep -v '^/bin/zsh$' /etc/shells > $TmpFile
        cp -f $TmpFile /etc/shells
        rm -f $TmpFile
    fi
fi

这里包含了安装后,卸载前/后脚本。

检验

还可以查询软件包安装之后的文件是否发生了改变

rpm {-V|--verify} [select-options] [verify-options]

如:

[root@localhost rpm]# rpm -V httpd
S.5....T.  c /etc/httpd/conf/httpd.conf

检验时使用了多个位表示文件的多个属性是否发生了变化:

S文件大小M文件权限5文件摘要信息(通常是MD5码)D设备文件的主/次设备号L软链接变化U属主G属组T文件的mtime P caPabilities

程序包的合法性验证

在软件包制作时,为了防止软件包被人修改植入后门,制作者可以使用自己私钥对软件包进行数字签名,安装者就可以使用公钥验证软件包的合法性。同时还可以使用摘要算法提取软件包的摘要信息用于验证软件包的完整性。

通常,RHEL 系的安装光盘中包含有用于验证其软件包合法性的公钥文件。

导入公钥

rpm --import /path/to/RPM-GPG-KEY-FILE

验证合法性

rpm {-K|--checksig} PACKAGE_FILE
联系我们

邮箱 626512443@qq.com
电话 18611320371(微信)
QQ群 235681453

Copyright © 2015-2024

备案号:京ICP备15003423号-3