RPM软件包管理与使用详解

文章目录

  • 1. 概述
  • 2. 软件包命名规范
  • 3. rpm包管理
    • 3.1 rpm包安装
    • 3.2 rpm包查询
    • 3.3 rpm包升级
    • 3.4 rpm包卸载
    • 3.5 rpm包校验
    • 3.6 rpm数据库重建


1. 概述


什么是rpm包?

  • rpm包是linux中的一种可执行程序,你只要使用命令rpm -ivh执行文件后缀为.rpm的程序,就可以安装这个rpm包。

rpm有哪些功能?

rpm即Red-Hat Package Manager(RPM软件包管理器),它作为一种软件包的同时,也是一个管理软件包的管理器,有以下的功能:

  • 安装、卸载、升级和管理软件
  • 组件查询
  • 验证软件包来源合法性
  • 软件包GPG和MD5数字签名的导入、验证和发布
  • 解决软件包依赖关系
  • 重建数据库
  • 网络远程安装

rpm软件包管理器的职责

  • 将二进制程序,库文件,配置文件,帮助文件打包成一个文件
  • 安装软件需将而二进制文件,库文件,配置文件,帮助文件放到相应的位置
  • 安装数据库,追踪所安装的每一个文件
  • 软件卸载时根据安装时生成的数据库将对应的文件删除

rpm软件包由什么组成?

  • 程序组成清单(每个包独有)
    • 文件清单
    • 安装或卸载时运行的脚本
  • 数据库(公共)
    • 程序包名称及版本
    • 依赖关系
    • 功能说明
    • 安装生成文件的文件路径及校验码信息

2. 软件包命名规范


一般软件包命名格式为:
RPM软件包管理与使用详解_第1张图片
包的组成:

  • 主包:name-9.7.1-1.el5.i586.rpm
  • 子包:name-libs-9.7.1-1.el5.i586.rpm name-utils-9.7.1-1.el5.i586.rpm

包名格式:

  • name-major.minor.release-release.arch.rpm

格式说明:

  • major(主版本号):重大改进
  • minor(次版本号):某个子功能发生重大变化
  • release(发行号):修正了部分bug,调整了一点功能
  • arch(硬件平台):
    • x86:i386、i486、i586
    • x86_64:x64、x86_64、amd64
    • 跟平台无关:noarch

3. rpm包管理


3.1 rpm包安装

语法:rpm -ivh /PATH/TO/PACKAGE_FILE ...

常用选项:

-i   安装
-v   显示详细信息
-h   显示安装进度条
--force   强行安装,可以实现重装或降级
--test    测试安装,不是真的进行安装
--nodeps  忽略依赖关系
--replacepkgs  重新安装,替换原有的安装
--oldpackage   降级
--nodigest     不检查包的完整性
--nosignature  不检查包的来源合法性
--noscripts    不执行程序包脚本片段
	%pre:安装前的脚本     --nopre
	%post:安装后的脚本    --nopost
	%preun:卸载前的脚本   --nopreun
	%postun:卸载后的脚本  --nopostun

示例:

  • 测试一个软件包是否能在该系统上安装
[root@node1 ~]# rpm -ivh --test vsftpd-3.0.3-28.el8.x86_64.rpm
  • 强制安装一个软件包
[root@node1 ~]# rpm -ivh --force vsftpd-3.0.3-28.el8.x86_64.rpm

3.2 rpm包查询

语法:rpm OPTION PACKAGE_NAME ...

常用的选项:

-q   查询指定的包是否安装
-qa  查询已经安装的所有包 
-qi  查询指定包的说明信息
-ql  查询指定软件包安装后生成的文件列表
-qf  查询指定文件是由哪个rpm包安装生成的
-qc  查询指定指定包安装的配置文件
-qd  查询指定包安装的帮助文件
-q --scripts  查询指定包中包含的脚本
-q --whatprovides  查询指定的功能是由哪个包提供的,如rpm -q --whatprovides /bin/cat
-q --whatrequires  查询指定的功能被哪个包所依赖
-q --changelog     查询指定命令的制作日志
-q --provides      查询指定软件包所提供的功能
-qR   查询指定的软件包所依赖的功能
-qpi  查询指定未安装的包的说明信息
-qpl  查询未安装的软件包安装后会产生哪些文件

示例:

  • 查询vsftpd这个rpm包是否安装
[root@node1 ~]# rpm -q vsftpd
package vsftpd is not installed
  • 查找系统中已经安装的包中是否有ftp
[root@node1 ~]# rpm -qa |grep ftp
  • 查询vsftpd软件包的说明信息
[root@node1 ~]# rpm -qi vsftpd
  • 查询未安装的软件包会产生哪些文件
[root@node1 ~]# rpm -qpl vsftpd-3.0.3-28.el8.x86_64.rpm 
warning: vsftpd-3.0.3-28.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
......

3.3 rpm包升级

语法:rpm {-Uvh,-Fvh} /PATH/TO/PACKAGE_FILE ...

-Uvh  如果装有老版本则升级,否则安装
-Fvh  如果装有老版本则升级,否则退出

[root@node1 ~]# rpm -Uvh vsftpd-3.0.3-28.el8.x86_64.rpm

注意事项:

  • 不要对内核做升级,Linux支持多内核版本并存,可以直接安装新版本内核
  • 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

3.4 rpm包卸载

语法:rpm -e PACKAGE_NAME

[root@node1 ~]# rpm -e vsftpd

注意事项:

  • 如果其他包依赖于要卸载的包,这个被依赖的包是无法卸载的,除非强制卸载,强制卸载后依赖于这个包的其他程序将无法正常工作

3.5 rpm包校验

语法:rpm -V PACKAGENAME

没有提示信息,说明包没有被修改

提示信息具体内容:

  • S 文件的容量大小被改变
  • M 文件的类型或文件的属性被修改
  • 5 MD5加密的内容已经不同
  • D 装置的主/次代码已经改变
  • L 路径已经被修改
  • U 文件的所属主已被修改
  • G 文件的所属组已被修改
  • T 文件的创建时间已被修改

3.6 rpm数据库重建

rpm有一个强大的数据库/var/lib/rpm,数据库中包含程序包名称及版本、依赖关系、功能说明、安装生成文件的文件路径及校验码信息

重建数据库:

  • rpm --rebuilddb 重建数据库,一定会重新建立
  • rpm --initdb 初始化数据库,没有才建立,有的话不会建立

你可能感兴趣的:(Linux)