一、简述

    RPM Package Manager(原Red Hat Package Manager)即软件包管理器,是一种用在软件包的打包和安装的工具,其通过将源代码给予特定平台系统编译为可执行文件,并且保存了编译过程中的依赖关系,从而来简化开源软件包的安装和管理。

    RPM软件的管理主要是软件包的安装、卸载、升级、查询、校验、数据库维护等。



二、使用



    1.安装



        A)命令
rpm {-i|--install} [install-options] [package_file]+
 -i, --install 安装软件包
 -h, --hash 软件包安装的时候列出哈希标记 (和-v 一起使用效果更好)
 -v,--verbose 提供更多的详细信息输出
 -vv 打印出调试信息
# 常用格式
rpm -ivh package_file ...

install-options
    --test 不真正安装,只是判断下是否能安装
    --nodeps 不验证软件包依赖
    --replacepkgs 如果软件包已经有了,重新安装软件包
    
    --nosignature 不验证软件包签名,不检查来源的合法性
    --nodigest 不校验软件包的摘要,不检查包的完整性

    --noscripts 不执行软件包脚本
      %pre:安装前脚本,--nopre
      %post:安装后脚本,--nopost
      %preun:卸载前脚本,--nopreun
      %postun:卸载后脚本,--nopostun



        B)案例
[root@wybaron_host1015 ~]# ll
...
-rw-r--r--  1 root root 81428 3月  30 2014 pptpd-1.4.0-2.el7.x86_64.rpm
...
[root@wybaron_host1015 ~]# rpm -ivh --test pptpd-1.4.0-2.el7.x86_64.rpm 
警告:pptpd-1.4.0-2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
准备中...                          ################################# [100%]
	软件包 pptpd-1.4.0-2.el7.x86_64 已经安装
[root@wybaron_host1015 ~]# rpm -ivh --test --nosignature pptpd-1.4.0-2.el7.x86_64.rpm 
准备中...                          ################################# [100%]
	软件包 pptpd-1.4.0-2.el7.x86_64 已经安装
# 安装操作
[root@wybaron_host1015 ~]# rpm -ivh pptpd-1.4.0-2.el7.x86_64.rpm 
警告:pptpd-1.4.0-2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
准备中...                          ################################# [100%]
	软件包 pptpd-1.4.0-2.el7.x86_64 已经安装



    2.升级



        命令
rpm {-U|--upgrade} [install-options] <package_file>+
rpm {-F|--freshen} [install-options] <package_file>+
  -U|--upgrade 安装有旧版本程序包就进行“升级”,如果未安装旧版本程序包,则执行“安装”操作
  -F|--freshen 安装有旧版本程序包就进行“升级”,如果没有旧版本程序包,则不执行“安装”操作
# 常用格式
 rpm -Uvh <package_file>+
 rpm -Fvh <package_file>+
# 其它常用选项
 -froce 强行升级
 -oldpackage 降级

    注意:

        1)不要对内核做升级操作,linux支持多版本内核并存,需要使用新版本内核时,直接安装新版本内核即可。

        2)如果程序包的配置文件安装后曾被修改,升级时,新版本所提供的同一个配置文件并不会直接覆盖老版本的配置文件,而是将新版本的程序安装后的配置文件进行重命名(FILE_name.rpmnew)后保留。



    3.查询



        A)命令
rpm {-q|--query} [select-options] [query-options]
  [select-options]
    -a,--all 查询所有安装的包
    -f 查看指定的文件由哪个程序包安装生成
    -p <package_file> 针对尚未安装的程序包文件做查询操作
    
    --whatprovides <virtual> 查询所有提供<virtual>功能的包
    --whatrequires <capability> 查询所有需要<capability>才能提供适当功能的包(<capability>被哪个包所依赖)
  [query-options]
    --changelog 查询指定rpm包的变更记录,变更信息
    -d,--docfiles 只列出程序的文档文件(隐含-l选项)
    -c,--configfiles 只列出程序的配置文件(隐含-l选项)
    -i 展示rpm包的信息,包括名字,版本,以及描述等
    -l,--list 查看指定程序包安装过后生成的所有文件
    --scripts 如果有的话,就列出该包里作为安装或卸载过程一部分的特殊shell脚本(安装前后、卸载前后脚本)
    -R, --requires 列出制定程序包所依赖的别的包
    --provides 列出指定rpm包所提供的功能
# 常用格式
~]# rpm -qi PACKAGE 
~]# rpm -qf FILE 
~]# rpm -qc PACKAGE 
~]# rpm -ql PACKAGE 
~]# rpm -qd PACKAGE 
~]# rpm -qpi PACKAGE_FILE 
~]# rpm -qpl PACKAGE_FILE 
~]# rpm -qa PACKAGE 
...



        B)案例
[root@wybaron_host1015 ~]# rpm -qa | grep pptpd
pptpd-1.4.0-2.el7.x86_64
[root@wybaron_host1015 ~]# rpm -qc pptpd
/etc/ppp/options.pptpd
/etc/pptpd.conf
/etc/sysconfig/pptpd
[root@wybaron_host1015 ~]# rpm -ql pptpd
/etc/ppp/options.pptpd
/etc/pptpd.conf
/etc/sysconfig/pptpd
/usr/bin/vpnstats.pl
/usr/bin/vpnuser
/usr/lib/systemd/system/pptpd.service
...



    4.卸载



        命令
rpm {-e|--erase} [select-options] <package_name>+
  [select-options]
    --allmatches 将移去与<package_name>相匹配的所有版本的包。正常情况下,如果<package_name>与多个包相匹配,就会给出错误信息。
    --noscripts 不执行安装前或安装后脚本
    --notriggers 不执行由移去该包所激发的脚本
    --nodeps 卸载前不检查依赖性
    --test 不真正卸载任何东西,只是遍历该动作。常配合-vv选项使用



    5.校验



        命令
rpm {-V|--verify} [verifyoptions] [package]+
  [verifyoptions]
    --nofiles 核实时忽略缺失文件
    --nomd5 核实时忽略MD5校验错误
    --nopgp 核实时忽略PGP校验错误
    --nofiles 核实时忽略缺失文件
# 执行后输出的格式是一个八个字符的字符串,和一个可能有的"c",指明后面是一个配置文件,以及后面的文件名。八个字符中的每一个都代表着一个文件属性与保存在RPM的数据库中的属性纪录值的比较结果
  单个的"."(句号)表明检查通过。下列字符代表特定检查的失败:
  5 文件的MD5校验和发生变化
  S 文件大小发生变化
  L 文件的链接发生变化
  T 文件最后修改时间发生改变
  D 设备的主次设备号发生变化
  U 文件属主发生变化
  G 文件属组发生变化
  M 模式(包括许可和文件类型),常用于文件权限发生变化



    6.数据库维护



        命令
rpm {--initdb|--rebuilddb}
  --initdb 初始化,如果之前不存在数据库,则创建;否则,不执行任何操作
  --rebuilddb 无论之前是否存在,直接重新创建数据库



三、补充



    验正相关

        完整性验正:SHA256

        来源合法性验正:RSA



    公钥加密

        对称加密:加密、解密使用同一秘钥

        非对称加密:密钥是成对的

            public key :公钥,公开给所有人

            secret key :私钥,不能公开