您的位置:首页 > 运维架构 > Linux

CentOS系统的程序包管理:rpm

2019-07-27 15:38 33 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_44983653/article/details/97397837

CentOS系统的程序包管理:rpm

概述

CentOS系统上使用rpm命令管理程序包:包括 安装、卸载、升级、查询、校验、数据库维护 等。
rpm 命令格式:

# rpm  [OPTIONS]  [PACKAGE_FILE]

rpm 常用 OPTIONS:

安装:-i, --install
升级:-U, --update, -F, --freshen
卸载:-e, --erase
查询:-q, --query
校验:-V, --verify
数据库维护:--builddb, --initdb

rpm包安装

命令格式:

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

一些短选项可以合并在一起,比如常用的组合如下:

# rpm  -ivh  PACKAGE_FILE ...

选项说明:

# GENERAL OPTIONS:
-v:verbose,详细信息
-vv:更详细的输出
# [install-options]:
-h              # hash marks,输出进度条;每个#表示2%的进度
--test          # 测试安装,检查并报告依赖关系及冲突消息等(不真正执行安装,即dry run模式)
--nodeps        # 忽略依赖关系;不建议使用
--replacepkgs   # 重新安装
--nosignature   # 不检查包签名信息,不检查来源合法性
--nodigest      # 不检查包完整性信息
--noscripts     # 不执行程序包脚本

# rpm可以自带脚本执行,一共有四类,如下:
preinstall:安装过程开始之前运行的脚本           # %pre, --nopre
postinstall:安装过程完成之后运行的脚本          # %post, --nopost
preuninstall:卸载过程真正开始执行之前运行的脚本  # %preun, --nopreun
postuninstall:卸载过程完成之后运行的脚本        # %postun, --nopostun

示例:

[root@LeeMumu packages]# rpm -i tree-1.6.0-10.el7.x86_64.rpm
[root@LeeMumu packages]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz
[root@LeeMumu packages]# rpm -ivh wget-1.14-18.el7.x86_64.rpm
Preparing...                          ################################# [100%]
package wget-1.14-18.el7_6.1.x86_64 (which is newer than wget-1.14-18.el7.x86_64) is already installed
file /usr/bin/wget from install of wget-1.14-18.el7.x86_64 conflicts with file from package wget-1.14-18.el7_6.1.x86_64
file /usr/share/man/man1/wget.1.gz from install of wget-1.14-18.el7.x86_64 conflicts with file from package wget-1.14-18.el7_6.1.x86_64

rpm包升级

rpm包升级命令常用以下两种命令格式:

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

其中区别:

  • upgrade:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”。
  • freshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作。

常用的命令组合:

# rpm  -Uvh PACKAGE_FILE ...
# -U:升级或安装
# rpm  -Fvh PACKAGE_FILE ...
# -F:升级

常用的选项:

# [install-options]:
--oldpackage:降级
--force:强制升级

升级注意事项:

  • 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核。
  • 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供。

rpm包卸载

语法格式:

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

常用选项:

--allmatches   # 卸载所有匹配指定名称的程序包的各版本
--nodeps       # 忽略依赖关系
--test         # 测试卸载,dry run模式

rpm包查询

语法格式:

# 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
# -qd  PACKAGE
# -qpi PACKAGE_FILE
# -qpl PACKAGE_FILE
# -qpc PACKAGE_FILE
[root@LeeMumu ~]# rpm -qi httpd
Name        : httpd
Version     : 2.4.6
Release     : 89.el7.centos
Architecture: x86_64
Install Date: Sat 27 Jul 2019 03:34:19 AM EDT
Group       : System Environment/Daemons
Size        : 9817301
License     : ASL 2.0
Signature   : RSA/SHA256, Mon 29 Apr 2019 11:45:07 AM EDT, Key ID 24c6a8a7f4a80eb5
Source RPM  : httpd-2.4.6-89.el7.centos.src.rpm
Build Date  : Wed 24 Apr 2019 09:48:37 AM EDT
Build Host  : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
[root@LeeMumu ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
... ...
/etc/httpd/conf.d/welcome.conf

rpm包校验

语法格式:

# 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

包来源合法性验正及完整性验证:

  • 完整性验证:SHA256
  • 来源合法性验证:RSA

公钥加密方式:

  • 对称加密:加密、解密使用同一密钥
  • 非对称加密:密钥是成对儿的

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

# rpm -K|checksig rpmfile          # 检查包的完整性和签名
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
# RPM-GPG-KEY-CentOS-7             # CentOS 7发行版光盘提供
# rpm -qa “gpg-pubkey*”

验证:

  • 安装此组织签名的程序时,会自动执行验正
  • 手动验正:rpm -K PACKAGE_FILE

rpm数据库

  • 数据库路径如下,查询操作都是通过此处的数据库进行的。

    # /var/lib/rpm
  • 重建命令:

    # rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
    
    # initdb: 初始化
    # 初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作
    
    # rebuilddb:重建已安装的包头的数据库索引目录
    # 重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建

rpm获取帮助

  • CentOS 6:man rpm
  • CentOS 7:man rpmdb
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: