前言
在 Windows 系统里,我们安装软件会下载.exe安装包;CentOS、RHEL 这类 Linux 系统,则统一使用.rpm格式软件包。本文完整讲解底层工具rpm、上层工具yum,以及软件仓库配置,搭配大量实操命令,逻辑清晰,看完就能上手操作。
一、Linux 两大软件包体系
主流 Linux 分为两大阵营,软件包互不通用:
RPM 系列(本文讲解)
代表系统:CentOS7、RHEL、Rocky Linux、Fedora
软件包后缀:.rpm
配套工具:底层rpm命令、自动管理工具yumDEB 系列(简单了解)
代表系统:Ubuntu、Debian、Kali
软件包后缀:.deb
配套工具:apt
简单类比:
rpm = Windows 离线安装包,需要手动处理配套依赖;
yum = 电脑自带应用商店,联网一键安装,自动补齐所有需要的配套程序。
二、RPM 软件包基础认知
1. RPM 包名称结构
标准格式:软件名-原版版本-系统打包版本.架构.rpm
示例:lrzsz-0.12.20-36.el7.x86_64.rpm
lrzsz:软件名称0.12.20:软件官方原始版本号36.el7:打包版本,el7代表适配 CentOS7 系统x86_64:64 位服务器架构;noarch代表通用架构,所有机器都能装
2. 一个 RPM 包内部包含三类内容
程序本体:软件运行所需二进制程序、配置文件、帮助文档;
元数据信息:记录软件版本、依赖、版权、开发厂商等信息;
内置执行脚本:安装、升级、卸载时自动运行的脚本。
3. RPM 数字签名机制
软件厂商会使用一对公私钥管理安装包安全:
厂商用私钥给 rpm 包签名盖章;
用户服务器存放厂商公钥,安装时校验包是否被篡改、植入恶意程序;
日常使用阿里镜像源时,可设置gpgcheck=0临时关闭校验,简化操作。
4. 特殊规则:内核支持多版本共存
绝大多数软件同一时间只能保留一个版本,升级会直接覆盖旧文件;
唯独kernel内核包可以同时安装多个版本。如果更新内核后服务器无法启动,开机时可以切换旧内核正常进入系统。
三、rpm 底层命令详解(离线本地包工具)
rpm工具仅能操作本地已经下载好的 rpm 文件,不会联网、不会自动安装依赖,缺少依赖时直接报错,适合无网络离线场景。
1. 查询类命令(参数-q,日常高频使用)
1)查询单个软件是否安装
rpm-qvsftpd输出软件完整包名 = 已安装;提示 “未安装软件包”= 系统不存在该软件。
2)查看系统全部已安装软件
rpm-qa# 过滤查询指定相关软件(示例:查找ssh相关包)rpm-qa|grepssh3)查看软件完整详情(版本、安装时间、版权)
rpm-qiopenssh-server4)查看软件安装后生成的所有文件路径
rpm-qlopenssh-server5)只查看软件自带配置文件
rpm-qcopenssh-server6)只查看软件帮助手册文档
rpm-qdopenssh-server7)根据系统文件,反向查询所属软件包
修改配置文件后,想知道文件属于哪个软件时使用:
rpm-qf/etc/ssh/sshd_config8)查询软件所需依赖包
rpm-qRhttpd9)查看未安装的 rpm 包内部文件(参数-p)
rpm-qlphttpd-2.4.6-99.el7.x86_64.rpm2. 校验软件完整性(参数-V)
用于检测软件文件是否被删除、修改、修改权限:
rpm-Vopenssh-server无任何输出:软件所有文件完好;
输出字符 + 文件路径:代表对应文件被改动、丢失。
3. 安装、卸载、重装本地 rpm 包
安装本地包(参数-i,-v打印详情,-h显示进度条)
rpm-ivhlrzsz-0.12.20-36.el7.x86_64.rpm缺点:缺少依赖直接报错,需要手动下载对应依赖包。
卸载软件(参数-e)
# 正常卸载,有依赖占用会提示报错rpm-elrzsz# 强制卸载(不推荐,容易破坏系统依赖关系)rpm-e--nodepslrzsz修复重装损坏的软件包
rpm--reinstall-vhlrzsz*.rpm4. 不安装,仅提取 rpm 包内文件
# 一步提取包内全部文件rpm2cpio 包名.rpm|cpio-id四、yum 软件管理工具(线上安装首选)
yum是基于 rpm 封装的上层工具,核心优势:联网自动下载软件,自动解析并安装全部依赖,日常部署软件优先使用 yum。
rpm 和 yum 核心区别
| 工具 | 是否联网 | 依赖处理能力 | 使用场景 |
|---|---|---|---|
| rpm | 不联网 | 无,缺依赖直接报错 | 离线本地 rpm 包 |
| yum | 需要联网 | 自动下载所有依赖 | 服务器常规软件安装 |
1. yum 查询命令
- 查看软件详细介绍、版本、功能描述
yum info vsftpd- 列出软件,查看仓库可用版本
yum list vsftpd# 展示仓库所有历史版本,用于软件降级yum list vsftpd--showduplicates- 根据关键词搜索相关软件
yum search"web server"- 根据命令 / 文件,查询该文件归属哪个软件包
yum provides sar2. 安装、下载、升级、降级、卸载
在线安装软件(-y自动确认交互,无需手动输入 yes)
yuminstall-yvsftpd仅下载 rpm 包,不执行安装
如果软件已经安装,直接执行会无法下载,两种稳定方案:
# 方案1:强制重装下载yum reinstall vsftpd--downloadonly--downloaddir=/root# 方案2:专用下载工具 yumdownloaderyuminstallyum-utils-yyumdownloader vsftpd--destdir=/root安装本地 rpm 包,自动补齐依赖
yum localinstall ./xxx.rpm软件版本升级
# 升级单个软件yum update vsftpd-y# 升级系统内全部软件到最新版本yum update-y软件版本降级
将新版软件换回旧版本,依赖包必须同步降级,否则会报依赖错误:
yum downgrade-yhttpd httpd-tools卸载软件
yum remove-yvsftpd3. yum history 操作事务记录
yum 会保存每一次安装、卸载、降级操作,每条操作分配唯一数字 ID,支持回滚、重做。
- 查看全部操作记录
yumhistory- 查看指定编号操作完整日志(示例查看第 2 条记录)
yumhistoryinfo2- 撤销指定操作(回滚,自动删除本次安装的所有软件)
yumhistoryundo4- 重新执行指定编号的操作
yumhistoryredo44. 软件组批量管理
软件组是一套配套工具合集,例如图形桌面、开发工具,一键批量安装,无需逐个下载软件。
# 列出系统所有可用软件组yum grouplist# -v 参数,展示组内包含的所有软件包yum grouplist-v# 查看单个软件组详情yum groupinfo"Server with GUI"# 安装图形桌面环境yum groupinstall"Server with GUI"-y# 卸载指定软件组yum groupremove"Server with GUI"补充:若执行组命令提示无组信息,执行yum groups mark convert修复 yum 组数据库。
五、YUM 软件仓库(repo 源)完整讲解
yum 下载软件的来源就是 yum 仓库(repo 源),国内推荐阿里云镜像源,下载速度远快官方源。
1. 仓库配置文件存放路径
全局主配置文件:
/etc/yum.conf,控制 yum 全局行为;各软件源独立配置:
/etc/yum.repos.d/目录下所有.repo文件。
/etc/yum.conf 核心配置参数
[main] plugins=1 # 1开启yum插件,0关闭插件,消除执行yum时的Loading提示 keepcache=0 # 0安装完成后删除rpm缓存;1永久保留下载的安装包 gpgcheck=1 # 全局默认开启安装包签名校验 cachedir=/var/cache/yum # rpm缓存文件存放目录一键关闭 yum 开头插件提示的命令:
sed-i's/plugins=1/plugins=0/g'/etc/yum.conf2. repo 源文件标准格式
以阿里云 EPEL 扩展源为例:
[epel] name=Extra Packages for Enterprise Linux 7 - $basearch baseurl=http://mirrors.aliyun.com/epel/7/$basearch enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7参数说明:
[epel]:仓库唯一标识名称;name:仓库备注名称,仅用于展示;baseurl:软件包下载地址;enabled=1:启用该仓库;enabled=0:禁用仓库;gpgcheck=0:关闭安装包安全校验;1开启校验。
3. 仓库常用运维命令
- 查看当前系统已启用的仓库
yum repolist# 查看所有仓库,包含禁用状态的仓库yum repolist all- 启用 / 禁用指定仓库
yum-config-manager--enableepel-debuginfo yum-config-manager--disableepel-debuginfo- 更换源后,清理旧缓存并重建元数据
yum clean all&&yum makecache- 一键下载阿里云 EPEL 扩展源(提供大量系统自带源没有的工具)
curl-s-o/etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo- 自定义添加软件仓库
方式 1:自动生成 repo 文件
yum-config-manager --add-repo=仓库地址方式 2:手动写入仓库配置(多行写入语法)
cat<<'EOF'>/etc/yum.repos.d/docker-ce.repo[docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable enabled=1 gpgcheck=0 EOF补充:输入cat << 'EOF' > 文件后出现>提示符,代表等待输入多行配置,输入完成后单独一行敲EOF结束写入。
六、总结
rpm是底层包工具,仅支持本地离线包,不会自动处理依赖,适合无网络环境;yum基于 rpm 开发,联网自动下载软件并补齐全部依赖,是日常安装软件的主流工具;yum 通过 repo 仓库获取软件,更换国内镜像源可以大幅提升下载速度;
yum history 记录所有软件变更操作,支持回滚、重做,方便故障恢复;
软件组功能可以批量安装桌面、开发工具等成套环境,简化服务器部署;
熟练掌握仓库配置、缓存清理、源替换,是运维管理 CentOS7 的基础能力。