CentOS系统上rpm命令管理程序包:


共有六个部分:安装、升级、卸载、查询和校验、数据库维护(查询是重中之重)

rpm命令:rpm  [OPTIONS]  [PACKAGE_FILE]

安装:-i, --install

升级:-U, --update, -F, --freshen

卸载:-e, --erase

查询:-q, --query

校验:-V, --verify

数据库维护:--builddb, --initdb

1、安装:

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

rpm  -ivh  PACKAGE_FILE ...

GENERAL OPTIONS:

-v:verbose,详细信息

-vv:更详细的输出

[install-options]:

-h:hash marks输出进度条;每个#表示2%的进度;

--test:测试安装,检查并报告依赖关系及冲突消息等;

--nodeps:忽略依赖关系;不建议;

--replacepkgs:重新安装

--nosignature:不检查包签名信息,不检查来源合法性;

--nodigest:不检查包完整性信息;

    操作:先将光盘挂载到/media/cdrom

/dev/sr0 on /media/cdrom type iso9660 (ro,relatime)
[root@localhost Packages]#  cd /media/cdrom/Packages/
[root@localhost Packages]# ll
、、、、
-r--r--r--. 2 root root   2488816 11月 26 00:07 zsh-5.0.2-14.el7.x86_64.rpm
-r--r--r--. 2 root root    472768 11月 26 00:07 zsh-html-5.0.2-14.el7.x86_64.rpm
-r--r--r--. 2 root root     83640 7月   4 2014 zziplib-0.13.62-5.el7.i686.rpm
-r--r--r--. 2 root root     83176 7月   4 2014 zziplib-0.13.62-5.el7.x86_64.rpm
-r--r--r--. 2 root root    140088 7月   4 2014 zziplib-devel-0.13.62-5.el7.i686.rpm
-r--r--r--. 2 root root    140092 7月   4 2014 zziplib-devel-0.13.62-5.el7.x86_64.rpm
-r--r--r--. 2 root root     35380 7月   4 2014 zziplib-utils-0.13.62-5.el7.x86_64.rpm
[root@localhost Packages]#

以zsh-5.0.2-14.el7.x86_64.rpm为例进行安装

[root@localhost Packages]# rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm 
警告:zsh-5.0.2-14.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:zsh-5.0.2-14.el7                 ################################# [100%]
[root@localhost Packages]#

安装完成! 检测 已有/bin/zsh 下图:

[root@localhost Packages]# cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
/bin/zsh
[root@localhost Packages]#


2、升级:

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

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

rpm  -Uvh PACKAGE_FILE ...升级或安装;

rpm  -Fvh PACKAGE_FILE ...升级

--oldpackage:降级;

--force:强制升级;

注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;

    (2) 如果原程序包被改过,新程序包不会复盖改动过的程序包,而是新建一个.new结 

                   尾的文件。

   

3、卸载:

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

--allmatches:卸载所有匹配指定名称的程序包的各版本;

--nodeps:忽略依赖关系

--test:测试卸载,dry run模式

[root@localhost Packages]# rpm -e zsh
[root@localhost Packages]#

卸载时,只需要输入zsh就可以了,因为安装程序中已有名字,直接删除就可以查找到文件

4、查询:

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

[select-options]

PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;

-a, --all:查询所有已经安装过的包;

-f  FILE:查询指定的文件由哪个程序包安装生成;

-p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;

--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;

--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

[query-options]

--changelog:查询rpm包的changlog;

-l, --list:程序安装生成的所有文件列表;

-i, --info:程序包相关的信息,版本号、大小、所属的包组,等;

-c, --configfiles:查询指定的程序包提供的配置文件;

-d, --docfiles:查询指定的程序包提供的文档;

--provides:列出指定的程序包提供的所有的CAPABILITY;

-R, --requires:查询指定的程序包的依赖关系;

--scripts:查看程序包自带的脚本片断;

总结用法:

-qi  PACKAGE(查询安装包的信息), 

                -qf FILE(查询文件由哪个包生成),

                 -qc PACKAGE(查询包的配置文件),

                 -ql PACKAGE(查询安装包的列表),

[root@localhost Packages]# rpm -ql zsh
/bin/zsh
/etc/skel/.zshrc

                 -qd PACKAGE(查询安装包的相关doc文档)

-qpi  PACKAGE_FILE(干跑模式下,查询安装包的相关信息),

                 -qpl PACKAGE_FILE(干跑模式下,查询已安装的包列表), 

                -qpc PACKAGE_FILE, (干跑模式下,查询安装包的配置文件)

5、校验:

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

S 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


比如修改一下其中的这个文件:

/usr/share/zsh/5.0.2/functions/zmv


[root@localhost Packages]# file /usr/share/zsh/5.0.2/functions/zmv
/usr/share/zsh/5.0.2/functions/zmv: ASCII text
[root@localhost Packages]# vim /usr/share/zsh/5.0.2/functions/zmv

# function zmv {
# zmv, zcp, zln:
#
# This is a multiple move based on zsh pattern matching.  To get the full
# power of it, you need a postgraduate degree in zsh.  However, simple
# tasks work OK, so if that's all you need, here are some basic examples:
#   zmv '(*).txt' '$1.lis'

删除了一个空白行后

[root@localhost Packages]# vim /usr/share/zsh/5.0.2/functions/zmv

# function zmv {
# zmv, zcp, zln:
# This is a multiple move based on zsh pattern matching.  To get the full
# power of it, you need a postgraduate degree in zsh.  However, simple
# tasks work OK, so if that's all you need, here are some basic examples:

进行校验:

[root@localhost Packages]# rpm -V zsh
S.5....T.    /usr/share/zsh/5.0.2/functions/zmv
[root@localhost Packages]#

比对校验结果!


        包来源合法性验正和完整性验正:

来源合法性验正:

完整性验正:

获取并导入信任的包制作者的密钥:

    对于CentOS发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

验正:

(1) 安装此组织签名的程序时,会自动执行验正;

(2) 手动验正:rpm -K PACKAGE_FILE

6、数据库重建:


rpm管理器数据库路径:/var/lib/rpm/

查询操作:通过此处的数据库进行;

获取帮助:

CentOS 6:man rpm

CentOS 7:man rpmdb

rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]


--initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操


--rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;