第403集软件管理-RPM工具管理RPM包
|字数总计:3.1k|阅读时长:12分钟|阅读量:
软件管理 - RPM工具管理RPM包
1. RPM包管理概述
RPM是RPM Package Manager缩写, 由红帽开发用于软件包的安装升级卸载与查询。
1.1 软件包类型
| 软件包类型 |
说明 |
特点 |
| 源码包 |
源代码形式的软件包 |
需要编译安装 |
| 二进制包 |
编译好的软件包 |
直接安装使用 |
| RPM包 |
RedHat系列系统的二进制包 |
扩展名.rpm |
1.2 常见的软件包
- 源码包:
.tar.gz, .tar.bz2, .tar.xz
- 二进制包:
.rpm (RedHat/CentOS), .deb (Debian/Ubuntu)
注意: 不管是源码包,还是二进制包,安装时都可能会有依赖关系!
1.3 RPM获取途径
- RedHat光盘或官方网站
- RPM查询官网网站 (https://rpmfind.net/)
- Nginx软件官方网站 (https://nginx.org/)
1.4 RPM软件包命名规则
RPM包命名以-将软件分成了若干部分
示例: bash-4.2.46-28.el7.x86_64.rpm
命名格式: name-version-release.arch.rpm
| 部分 |
说明 |
示例 |
| name |
软件包名称 |
bash |
| version |
版本号 |
4.2.46 |
| release |
发布版本 |
28.el7 |
| arch |
系统平台 |
x86_64 |
版本号说明:
- 主版本: 重大更新
- 次版本: 子功能更新
- 修订号: 修复bug
发布版本说明:
el6: Enterprise Linux 6
el7: Enterprise Linux 7
- 查看系统版本:
hostnamectl
架构说明:
i386: 32位系统
x86_64: 64位系统
- 查看系统架构:
hostnamectl 或 uname -m
1.5 rpm包的组成
- 安装释放的文件: 软件的实际文件
- 软件包的元数据: 版本,发布号,架构,描述,要求,更改日志等
- 脚本: 安装前执行的脚本和安装后的脚本
1.6 查看系统光驱中RPM软件包
如果你的系统中还有系统的安装盘,首先我们让虚拟机链接上我们的系统安装盘,然后我们可以通过 mount /dev/cdrom /mnt命令把光驱挂载到/mnt目录下,那么你会在/mnt/Packages目录下看到很多.rpm的包文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [root@localhost ~] mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost ~] CentOS_BuildTag Packages RPM-GPG-KEY-CentOS-Security-6 EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6 GPL repodata TRANS.TBL images RPM-GPG-KEY-CentOS-6 isolinux RPM-GPG-KEY-CentOS-Debug-6
[root@localhost ~]
|
1.1 RPM包安装
使用rpm命令安装软件包, 需要了解如下参数:
1.1.1 安装参数
| 参数 |
功能 |
说明 |
-i |
安装 |
install |
-v |
详细信息 |
verbose |
-h |
安装进度 |
hash marks |
--test |
测试是否能够安装成功 |
不实际安装 |
--force |
强制重新安装 |
覆盖已安装的包 |
--nodeps |
忽略依赖关系 |
不检查依赖 |
1.1.2 安装示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [root@liyanzhao ~] [root@liyanzhao ~]
[root@liyanzhao ~] [root@liyanzhao Packages]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
|
1.1.3 安装常见问题
问题1: 依赖关系
1 2 3 4 5 6
| error: Failed dependencies: libc.so.6 is needed by tree-1.6.0-10.el7.x86_64
rpm -ivh --nodeps package.rpm
|
问题2: 软件包已安装
1 2 3 4 5
| package tree-1.6.0-10.el7.x86_64 is already installed
rpm -ivh --force package.rpm
|
1.2 RPM包查询
使用rpm命令查询已安装好的rpm包, 需要了解如下参数:
1.2.1 查询参数
| 参数 |
功能 |
说明 |
-q |
查看指定软件包是否安装 |
query |
-qa |
查看系统中已安装的所有RPM软件包列表 |
query all |
-qi |
查看指定软件的详细信息 |
query info |
-ql |
查询指定软件包所安装的目录、文件列表 |
query list |
-qc |
查询指定软件包的配置文件 |
query config |
-qd |
查询指定软件包的帮助文档 |
query doc |
-qf |
查询文件或目录属于哪个RPM软件 |
query file |
-q --scripts |
查询rpm包安装前和安装后执行的脚本 |
query scripts |
1.2.2 查询已安装的软件包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~] [root@liyanzhao ~]
|
1.2.3 查询未安装的软件包
1 2 3 4 5
| [root@liyanzhao ~]
[root@liyanzhao ~]
|
1.2.4 查询脚本
1.2.5 查询实战示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| rpm -qa
rpm -qa |grep nginx
rpm -qi nginx
rpm -ql nginx
rpm -qf /usr/bin/vim which vim |xargs rpm -qf
rpm -qf /etc/passwd
|
1.3 RPM包升级
1.3.1 升级参数
| 参数 |
功能 |
说明 |
-U |
升级或安装 |
如果老版本不存在,就全新安装,如果存在有新版即升级 |
-F |
仅升级 |
老版本必须存在 |
1.3.2 升级示例
1 2 3 4 5
| [root@liyanzhao ~]
[root@liyanzhao ~]
|
1.3.3 升级注意事项
- 不要跨操作系统主版本号升级: 例如不要从CentOS 6升级到CentOS 7
- 备份重要数据: 升级前备份配置文件和数据
- 测试升级: 使用
--test参数测试升级是否成功
- 查看变更日志: 了解新版本的变更内容
1.3.4 升级与安装的区别
| 操作 |
命令 |
说明 |
| 安装 |
rpm -ivh |
如果已安装会报错 |
| 升级 |
rpm -Uvh |
如果已安装则升级,未安装则安装 |
| 仅升级 |
rpm -Fvh |
仅升级已安装的包 |
1.4 RPM包卸载
卸载包时需要先把依赖的包卸载掉,如果依赖的包是系统所必须的,那就不能卸载这个包,否则会造成系统崩溃。
1.4.1 卸载参数
| 参数 |
功能 |
说明 |
-e |
卸载 |
erase |
--nodeps |
忽略依赖关系 |
强制卸载(危险) |
1.4.2 卸载示例
1 2 3 4 5 6 7 8 9 10 11
| [root@liyanzhao ~] zsh-5.0.2-28.el7.x86_64
[root@liyanzhao ~]
[root@liyanzhao ~]
[root@liyanzhao ~]
|
1.4.3 卸载常见问题
问题1: 依赖关系
1 2 3 4 5
| error: Failed dependencies: tree is needed by (installed) other-package
|
问题2: 系统必需软件包
1.5 RPM包校验
软件相关的数据库存放于/var/lib/rpm目录
1.5.1 校验命令
1 2 3 4 5 6
| [root@liyanzhao ~] S.5....T. c /etc/pam.d/vsftpd .......T. c /etc/vsftpd/ftpusers S.5....T. c /etc/vsftpd/vsftpd.conf .M....... /var/ftp/pub
|
1.5.2 校验结果说明
| 字符 |
说明 |
含义 |
| S |
Size |
文件的容量大小是否被改变 |
| M |
Mode |
文件的类型或者文件的属性是否被修改 |
| 5 |
MD5 |
MD5这一种指纹加密的内容已经不同 |
| D |
Device |
装置的主/次代码已经改变 |
| L |
Link |
路径已经被改变 |
| U |
User |
文件的所属主已被修改 |
| G |
Group |
文件的所属组已被修改 |
| T |
Time |
文件的创建时间已被改变 |
| . |
正常 |
该属性未改变 |
| c |
config |
配置文件 |
| d |
doc |
文档文件 |
1.5.3 校验示例
1 2 3 4 5 6 7 8 9 10 11
| rpm -V vsftpd
rpm -Va
rpm -Vf /usr/bin/vim
rpm -Vv vsftpd
|
1.5.4 校验实战
1 2 3 4 5 6 7 8
| rpm -Va |grep "^..5"
rpm -Vc vsftpd
rpm -Va |grep "^..5.*c"
|
1.6 RPM包小结
1.6.1 常见问题解答
问题1: 如何查询 util-linux 软件包安装了哪些文件?
1 2 3 4 5
| rpm -ql util-linux
rpm -qlp /path/to/util-linux.rpm
|
问题2: 如何查询 mkdir 命令是由哪个 RPM 软件包安装的?
1 2 3 4 5 6 7 8
| rpm -qf /usr/bin/mkdir
which mkdir |xargs rpm -qf
rpm -qf $(which mkdir)
|
问题3: 安装 .rpm 软件包时,-i、-U、-F选项有何区别?
| 选项 |
命令 |
说明 |
| -i |
rpm -ivh |
安装:如果已安装会报错 |
| -U |
rpm -Uvh |
升级或安装:如果已安装则升级,未安装则安装 |
| -F |
rpm -Fvh |
仅升级:仅升级已安装的包,未安装则不安装 |
1.6.2 RPM命令总结
安装相关
| 命令 |
功能 |
示例 |
rpm -ivh |
安装软件包 |
rpm -ivh package.rpm |
rpm -Uvh |
升级或安装 |
rpm -Uvh package.rpm |
rpm -Fvh |
仅升级 |
rpm -Fvh package.rpm |
rpm -e |
卸载软件包 |
rpm -e package_name |
查询相关
| 命令 |
功能 |
示例 |
rpm -q |
查询软件包 |
rpm -q package_name |
rpm -qa |
查询所有软件包 |
rpm -qa |
rpm -qi |
查询软件包信息 |
rpm -qi package_name |
rpm -ql |
查询软件包文件列表 |
rpm -ql package_name |
rpm -qc |
查询配置文件 |
rpm -qc package_name |
rpm -qf |
查询文件属于哪个包 |
rpm -qf /path/to/file |
校验相关
| 命令 |
功能 |
示例 |
rpm -V |
校验软件包 |
rpm -V package_name |
rpm -Va |
校验所有软件包 |
rpm -Va |
rpm -Vf |
校验文件 |
rpm -Vf /path/to/file |
1.6.3 RPM数据库
1 2 3 4 5 6 7 8
| /var/lib/rpm/
rpm --rebuilddb
rpm --initdb
|
1.6.4 RPM最佳实践
- 安装前检查: 使用
--test测试安装
- 查询依赖: 安装前了解软件包的依赖关系
- 备份配置: 升级前备份配置文件
- 定期校验: 定期使用
rpm -Va校验系统文件
- 使用yum: 对于依赖关系复杂的软件包,建议使用yum安装
2. RPM与YUM对比
2.1 对比说明
| 特性 |
RPM |
YUM |
| 依赖处理 |
需要手动解决 |
自动解决 |
| 软件源 |
本地文件 |
远程仓库 |
| 安装速度 |
快 |
相对慢(需要下载) |
| 适用场景 |
离线安装、单个包 |
在线安装、批量安装 |
2.2 使用建议
- RPM: 适用于离线环境、单个软件包安装、精确控制版本
- YUM: 适用于在线环境、批量安装、自动解决依赖
3. 实战案例
3.1 案例1: 从光盘安装软件
1 2 3 4 5 6 7 8 9 10 11 12
| mount /dev/cdrom /mnt
ls /mnt/Packages/ |grep tree
rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
rpm -q tree tree --version
|
3.2 案例2: 查询软件包信息
1 2 3 4 5 6 7 8 9 10 11
| rpm -qi nginx
rpm -ql nginx
rpm -qc nginx
rpm -qf $(which nginx)
|
3.3 案例3: 软件包升级
1 2 3 4 5 6 7 8 9 10 11
| rpm -q vsftpd
rpm -Uvh --test vsftpd-new.rpm
rpm -Uvh vsftpd-new.rpm
rpm -q vsftpd
|
3.4 案例4: 系统文件校验
1 2 3 4 5 6 7 8
| rpm -Va > /tmp/rpm_verify.log
grep "^..5" /tmp/rpm_verify.log
rpm -V vsftpd
|