Linux 软件包管理:rpm 与 yum 实战指南

1. Linux 应用程序管理基础

应用程序与系统命令区别:系统命令随系统安装用于维护,多在字符界面运行;应用程序需另行安装提供独立功能,支持命令行或图形化。

内建与外建程序:内建程序随系统启动自动运行;外建程序需手动安装使用。

1.1 命令文件位置(典型约定)

类型说明常见路径
系统命令(外部)体积小,随操作系统自带安装/bin,/sbin
系统命令(内部 / 内建)集成在 Shell(Bash)内部内建命令,无独立可执行文件
应用程序(普通用户可执行)独立软件的普通执行命令/usr/bin,/usr/local/bin
应用程序(管理 / 服务)管理员专用管理工具、服务程序/usr/sbin,/usr/local/sbin

区分小提示:

  • bin:普通用户可执行
  • sbin:管理员 root 专用

1.2 命令与应用程序特性

1.2.1 主要用途
  • 系统命令:随操作系统预装,用于系统管理、维护。
  • 应用程序:一般需要额外安装,提供独立业务功能(软件)。
1.2.2 适用环境
  • 系统命令:大多在终端 / 字符界面使用。
  • 应用程序:可以命令行运行,部分带图形界面。
1.2.3 运行格式
  • 系统命令:标准格式 命令 选项 参数
  • 应用程序:执行格式由开发者定义,不固定。

1.3 软件包安装后的典型目录结构

安装软件后,会新增多类文件:

文件类型作用典型存放路径
普通可执行文件用户可直接运行的程序/usr/bin/
管理 / 服务可执行仅管理员运行的工具、守护进程/usr/sbin/
配置文件程序运行参数/etc/(支持子目录)
日志文件程序运行产生日志/var/log/
文档 / 示例说明文档、示例文件/usr/share/doc/
man 手册命令帮助手册/usr/share/man/

示例:查看 postfix 软件安装后所有文件清单

rpm -ql postfix

1.4 安装包格式常识

需明确不同系统的安装包格式与安装工具。

  • RPM 包:适用于 Red Hat、CentOS、Fedora 等,使用 rpm 或 yum 工具安装。
  • DEB 包:适用于 Ubuntu 等 Debian 系系统,使用 apt 或 dpkg 工具安装。
  • TAR.GZ / TAR.BZ2:源码编译包,需 gcc 和 make 等编译环境支持。
  • 自带安装程序:如 install.sh 等脚本,解包后直接运行即可。

2. rpm 与 yum 包管理工具对比

rpm 工具局限性:rpm 安装软件时不处理依赖包,若软件存在依赖关系则安装会失败。

yum 工具优势:yum 是解决依赖包的管理工具,能自动处理安装软件的依赖关系,企业日常推荐使用。

3. RPM 包管理工具实操

3.1 查询已安装包

日常高频使用 rpm -q 查是否安装,rpm -ql 查文件列表,rpm -qc 查配置文件,rpm -qa 列出所有已安装包。

3.2 命名规则解析

标准格式为“软件名-版本号-发布次数-硬件平台.扩展名”,其中 x86_64 代表 64 位硬件架构。

3.3 安装升级卸载

使用 rpm -ivh 安装,rpm -uvh 升级,rpm -evh 卸载;生产环境不推荐忽略依赖检查。

3.4 挂载光盘镜像实操

演示将 ISO 镜像设备挂载至 /mnt 目录后,通过管道符过滤并精准定位特定软件包进行安装与验证。下面给出一个从挂载 ISO 镜像、配置本地 yum 源到安装指定软件包的完整实战案例。

步骤一:挂载 ISO 镜像

首先创建挂载点,并将 ISO 镜像设备挂载到 /mnt 目录。

# 创建挂载点目录
mkdir -p /mnt
挂载 ISO 镜像设备(设备名以实际为准,常见为 /dev/cdrom 或 /dev/sr0)
mount -o loop /dev/cdrom /mnt
验证挂载是否成功
df -h /mnt

预期输出:df 命令会显示 /mnt 挂载点的文件系统、容量和使用率等信息,例如:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sr0        4.3G  4.3G     0 100% /mnt

常见错误提示

  • mount: /dev/cdrom is not a block device:设备名不正确,可改用 lsblk 查看实际设备名。
  • mount: /mnt: mount point does not exist:挂载点目录未创建,先执行 mkdir -p /mnt
  • mount: no medium found on /dev/sr0:光驱中没有光盘或 ISO 未正确连接,请检查虚拟机光驱设置。
步骤二:配置本地 yum 源

将原有仓库文件备份,并创建指向挂载目录的本地仓库配置文件。

# 备份原有仓库文件
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
创建本地仓库配置文件
cat > /etc/yum.repos.d/local.repo <<EOF
[local]
name=Local Yum Repository
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
清理缓存并重新生成元数据
yum clean all
yum makecache

预期输出:执行 yum makecache 后,会显示正在加载本地仓库元数据,并提示元数据缓存已建立,例如:

Loaded plugins: fastestmirror
local                                                     | 3.6 kB  00:00:00
(1/2): local/group_gz                                     | 153 kB  00:00:00
(2/2): local/primary_db                                   | 3.1 MB  00:00:00
Metadata Cache Created

常见错误提示

  • Could not open/read repomd.xml:baseurl 指向的目录下没有 repodata 目录,请确认挂载点内容是否正确。
  • Cannot retrieve repository metadata:挂载未成功或路径格式错误,检查 ls /mnt 是否能看到 repodata 目录。
  • GPG key retrieval failed:gpgcheck 设为 1 但缺少公钥,本地源建议设为 0 跳过签名验证。
步骤三:安装指定软件包

通过 yum 搜索并安装指定软件包,这里以安装 httpd(Apache Web 服务器)为例。

# 搜索软件包确认可用
yum list | grep httpd
安装指定软件包
yum install -y httpd
验证安装结果
rpm -q httpd

预期输出:安装完成后,rpm -q httpd 会输出已安装的软件包完整名称和版本号,例如:

httpd-2.4.6-97.el7.centos.x86_64

常见错误提示

  • No package httpd available:本地源中不包含该软件包,可先执行 yum list | grep httpd 确认包名是否正确。
  • Error: Nothing to do:软件包已安装或名称拼写错误,用 yum list installed | grep httpd 检查。
  • Could not find a match:仓库元数据未更新,执行 yum clean all && yum makecache 后重试。

至此,已完成从挂载 ISO 镜像、配置本地 yum 源到安装指定软件包的完整流程,后续即可通过 yum 命令方便地安装、升级和卸载其他软件包。

4. yum 本地源配置流程

配置本地源需遵循标准操作流程以确保系统正确识别仓库。

  1. 挂载光盘:将光盘设备挂载至指定目录(如 /mnt)。
  2. 切换目录:cd 进入 /etc/yum.repos.d 目录。
  3. 迁移旧源:将原 repos.d 下的所有配置文件备份或迁移至新建的 backup 目录下。
  4. 创建并编辑仓库文件:在 /etc/yum.repos.d 下创建以 .repo 结尾的文件并写入配置参数。
  5. 缓存清理与刷新:执行清除旧缓存和重新加载新源的操作。

4.1 仓库文件核心参数

  • baseurl:指定本地源的访问路径,格式为 file:///挂载目录。
  • enabled:控制仓库启用状态,1 代表开启,0 代表关闭。
  • gpgcheck:控制签名验证状态,1 代表验证,0 代表不验证(生产环境通常设为 0 以节省时间)。

4.2 常见错误排查

配置本地源时,常因路径、签名或缓存问题导致 yum 无法正常使用,下面列出三种高频问题的现象、原因与解决方法。

4.2.1 baseurl 路径错误

现象:执行 yum 命令时报错,提示找不到仓库元数据,例如 Cannot retrieve repository metadataCould not open/read repomd.xml

原因:仓库文件中的 baseurl 指向的目录不存在、未正确挂载,或路径格式不符合 file:///挂载目录 的约定。

解决方法:先确认光盘已挂载,再核对 baseurl 是否与挂载点一致,最后用 ls 验证目录下是否存在 repodata 目录。

# 确认挂载点内容
ls /mnt
查看仓库文件中的 baseurl 配置
cat /etc/yum.repos.d/local.repo
修正后清理缓存并重新加载
yum clean all
yum makecache
4.2.2 gpgcheck 验证失败

现象:安装软件包时提示 GPG key retrieval failedPublic key for xxx is not installed,安装过程被中断。

原因:仓库文件开启了 gpgcheck=1,但系统缺少对应的 GPG 公钥,或本地源未提供可用的签名密钥。

解决方法:对于本地光盘源,可临时将 gpgcheck 设为 0 跳过签名验证;若必须保留验证,则需导入对应公钥。

# 临时关闭签名验证(本地源常用做法)
sed -i 's/gpgcheck=1/gpgcheck=0/' /etc/yum.repos.d/local.repo
或导入光盘自带的公钥
rpm --import /mnt/RPM-GPG-KEY-*
重新清理并刷新缓存
yum clean all
yum makecache
4.2.3 缓存未清理导致仓库信息不更新

现象:修改仓库文件或更换挂载内容后,yum 仍使用旧的仓库信息,出现 Could not find a match 或安装到旧版本软件包。

原因:yum 缓存了旧的元数据,未执行清理操作,导致新配置未生效。

解决方法:修改仓库文件后,务必先清理缓存再重新生成元数据缓存。

# 清理所有缓存
yum clean all
重新生成仓库元数据缓存
yum makecache
验证仓库是否已识别
yum repolist

4.3 配置网络 yum 源

当系统可以访问外网时,使用网络 yum 源可以获得更丰富的软件包和更及时的更新。下面以阿里云镜像源为例,演示如何替换系统默认的 CentOS-Base.repo 仓库文件。

4.3.1 替换 CentOS-Base.repo

首先备份原有的仓库文件,然后下载阿里云镜像源提供的 CentOS-Base.repo 并替换到 /etc/yum.repos.d/ 目录下。

# 备份原有仓库文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载阿里云镜像源仓库文件(以 CentOS 7 为例)
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
查看替换后的仓库文件内容
cat /etc/yum.repos.d/CentOS-Base.repo

替换后的仓库文件核心配置示例如下:

[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
4.3.2 刷新缓存

替换仓库文件后,需要清理旧缓存并重新生成元数据缓存,使新配置立即生效。

# 清理所有缓存
yum clean all
重新生成仓库元数据缓存
yum makecache
验证仓库是否已识别
yum repolist

预期输出:执行 yum makecache 后,会显示正在从阿里云镜像源下载仓库元数据,并提示元数据缓存已建立,例如:

Loaded plugins: fastestmirror
base                                                      | 3.6 kB  00:00:00
updates                                                   | 3.4 kB  00:00:00
extras                                                    | 2.9 kB  00:00:00
Metadata Cache Created
4.3.3 本地源与网络源对比

本地源与网络源各有适用场景,实际部署时应根据网络环境灵活选择:

对比项本地源网络源
适用环境内网离线环境、无外网访问权限有外网访问权限的服务器或开发机
软件包来源光盘镜像或本地仓库目录阿里云、清华等公共镜像站
软件包丰富度受限于镜像内容,版本相对固定软件包丰富,更新及时
安装速度本地读取,速度快且稳定依赖网络带宽,可能受网络波动影响
典型场景生产内网、隔离机房、离线安装开发测试、日常运维、需要最新软件包

选择建议:内网离线环境优先使用本地源,保证安装稳定可靠;有外网访问权限的环境推荐使用网络源,以获得更丰富的软件包和及时的安全更新。

5. yum 常用命令与操作

yum 是基于 rpm 的包管理工具,核心价值在于自动解析并安装依赖。下面按操作类型介绍最常用的 yum 命令,每个小节给出命令格式、典型用法与注意事项。

5.1 install 安装

用于安装指定包,配合 -y 参数可自动确认所有依赖包的安装请求。

# 安装指定软件包(-y 自动确认所有依赖)
yum install -y 软件包名
# 同时安装多个软件包
yum install -y 包1 包2 包3

注意事项:安装前建议先执行 yum list | grep 包名 确认仓库中存在该包;若提示 No package xxx available,说明仓库中无此包或仓库元数据未更新。

5.2 remove 卸载

卸载指定包的同时会自动清理并删除其关联的所有已安装依赖包。

# 卸载指定软件包
yum remove -y 软件包名

注意事项:卸载前应确认没有其他服务依赖该软件包,避免误删系统关键依赖;若提示 Error: Trying to remove "yum", which is protected,说明误操作了系统保护包,应立即终止。

5.3 update 升级

升级指定包或不指定包时自动升级,因耗时过长在生产环境中较少使用。

# 升级指定软件包
yum update -y 软件包名
# 升级所有可升级的软件包(生产环境慎用)
yum update -y
# 仅检查可升级的软件包,不实际升级
yum check-update

注意事项:升级前建议先执行 yum check-update 包名 查看是否有新版本;生产环境升级前应做好备份,避免依赖冲突导致服务异常。

5.4 list 查询

查看软件包列表信息,支持通过 grep 进行关键词过滤。

# 查看所有可安装的软件包列表
yum list
# 查看当前系统中已安装的软件包列表
yum list installed
# 查看仓库中可更新的软件包
yum list updates
# 按关键词过滤
yum list | grep 关键词

注意事项:yum list 输出内容较多,实际使用中常配合 grep 过滤;若列表为空,先执行 yum clean all && yum makecache 刷新仓库元数据。

5.5 info 查看详情

显示指定软件包的详细信息,如版本号、架构、大小、仓库来源等。

# 查看软件包详细信息
yum info 软件包名
# 查看已安装软件包的详细信息
yum info installed 软件包名

注意事项:yum info 输出的 Repo 字段可帮助确认软件包来自本地源还是网络源,便于排查仓库配置问题。

5.6 search 搜索

根据关键词搜索提供该功能的软件包。

# 按关键词搜索软件包
yum search 关键词
# 搜索并显示更详细的信息
yum search -v 关键词

注意事项:搜索关键词支持模糊匹配,例如 yum search web server 会返回与 Web 服务器相关的多个软件包;若搜索无结果,可尝试更换关键词或先刷新仓库缓存。

5.7 其他常用命令

除上述核心命令外,以下命令在运维中也经常使用:

# 查看仓库列表及启用状态
yum repolist
# 清理所有缓存
yum clean all
# 重新生成仓库元数据缓存
yum makecache
# 查看软件包依赖关系
yum deplist 软件包名
# 查看软件包所属仓库
yum list 软件包名

注意事项:修改仓库文件或更换挂载内容后,务必先执行 yum clean all 再执行 yum makecache,否则新配置可能不生效。

6. 综合实战:yum 管理 nginx 软件包

下面通过一个完整案例,演示如何使用 yum 对 nginx 软件包进行安装、查询、升级和卸载,覆盖每一步的命令、预期输出与常见错误提示。

步骤一:查询软件包

安装前先确认仓库中是否存在 nginx 软件包,并查看其详细信息。

# 搜索软件包
yum search nginx
查看软件包详细信息
yum info nginx
确认当前是否已安装
yum list installed | grep nginx

预期输出yum search nginx 会列出与 nginx 相关的软件包名称和简介;yum info nginx 会显示名称、版本、架构、仓库来源等信息,例如:

Name        : nginx
Arch        : x86_64
Version     : 1.20.1
Release     : 10.el7
Size        : 570 k
Repo        : local

常见错误提示

  • No matching Packages to list:仓库中不存在 nginx 包,先执行 yum list | grep nginx 确认包名是否正确。
  • Error: No matching Packages to list:软件包名称拼写错误,或仓库元数据未更新,执行 yum clean all && yum makecache 后重试。
步骤二:安装软件包

使用 yum 安装 nginx,-y 参数可自动确认所有依赖包的安装请求。

# 安装 nginx
yum install -y nginx
验证安装结果
rpm -q nginx

预期输出:安装过程中会显示依赖解析和下载进度,安装完成后 rpm -q nginx 输出已安装的完整包名和版本号,例如:

nginx-1.20.1-10.el7.x86_64

常见错误提示

  • No package nginx available:仓库中不包含 nginx,先执行 yum list | grep nginx 确认包名。
  • Error: Nothing to do:软件包已安装或名称拼写错误,用 yum list installed | grep nginx 检查。
  • Requires: xxx is needed:缺少依赖包,yum 会自动尝试解决,若仍失败可执行 yum clean all && yum makecache 后重试。

步骤三:查询已安装软件包

安装完成后,可通过多种方式查询 nginx 的安装状态、文件列表和配置信息。

# 查询是否已安装
rpm -q nginx
查看安装的文件列表
rpm -ql nginx
查看配置文件列表
rpm -qc nginx
查看软件包详细信息
yum info nginx

预期输出rpm -ql nginx 会列出 nginx 安装后生成的所有文件路径,例如:

/etc/nginx/nginx.conf
/usr/sbin/nginx
/usr/share/doc/nginx-1.20.1/README
/var/log/nginx/

常见错误提示

  • package nginx is not installed:软件包未安装,先执行 yum install -y nginx
  • No such file or directory:查询的文件路径不存在,用 rpm -ql nginx 查看实际安装路径。

步骤四:升级软件包

当仓库中存在更高版本时,可使用 yum 升级 nginx 到最新版本。

# 检查是否有可用升级
yum check-update nginx
升级 nginx 到最新版本
yum update -y nginx
验证升级后的版本
rpm -q nginx

预期输出yum check-update nginx 若有新版本会列出待升级的包名和版本;升级完成后 rpm -q nginx 输出新版本号,例如:

nginx-1.20.2-11.el7.x86_64

常见错误提示

  • No packages marked for update:当前已是最新版本,无需升级。
  • Error: Nothing to do:仓库中没有更高版本,或软件包未安装。
  • Transaction check error:升级过程中依赖冲突,先执行 yum clean all && yum makecache 后重试。

步骤五:卸载软件包

不再需要 nginx 时,可使用 yum 卸载,并自动清理关联的依赖包。

# 卸载 nginx
yum remove -y nginx
验证卸载结果
rpm -q nginx

预期输出:卸载过程中会显示被删除的软件包列表;卸载完成后 rpm -q nginx 提示软件包未安装,例如:

package nginx is not installed

常见错误提示

  • No Match for argument: nginx:软件包未安装,无需卸载。
  • Error: Trying to remove "yum", which is protected:误删系统关键包,卸载前先确认包名,避免移除系统依赖。

至此,已完成使用 yum 对 nginx 软件包进行查询、安装、升级和卸载的完整流程。实际运维中,建议先查询再安装,升级前做好备份,卸载时确认无其他服务依赖该软件包。

7. rpm 与 yum 常用命令速查表

下表汇总了 rpm 与 yum 在日常运维中最常用的命令对照,便于快速查阅。rpm 适合对已安装包做精细查询,yum 适合安装、升级、卸载等需要处理依赖的操作。

操作类型rpm 命令yum 命令说明
查询已安装包rpm -q 包名yum list installed 包名确认指定软件包是否已安装,并显示完整包名与版本号。
列出所有已安装包rpm -qayum list installed列出系统中所有已安装的软件包,可配合 grep 过滤关键词。
安装软件包rpm -ivh 包名.rpmyum install -y 包名rpm 不处理依赖,需手动解决;yum 自动解析并安装依赖。
升级软件包rpm -Uvh 包名.rpmyum update -y 包名rpm 升级不处理依赖;yum 升级时自动处理依赖关系。
卸载软件包rpm -e 包名yum remove -y 包名rpm 卸载不处理依赖;yum 卸载时自动清理关联依赖包。
查看文件列表rpm -ql 包名yum install 后可用 rpm -ql 查询列出软件包安装后生成的所有文件路径,yum 本身无对应命令。
查看配置文件列表rpm -qc 包名yum install 后可用 rpm -qc 查询列出软件包安装后生成的配置文件路径,便于定位配置项。
查看软件包详情rpm -qi 包名yum info 包名显示软件包的版本、架构、大小、仓库来源等详细信息。
搜索软件包rpm -qa | grep 关键词yum search 关键词按关键词搜索提供该功能的软件包,yum 支持模糊匹配。
查看软件包依赖rpm -qR 包名yum deplist 包名查看软件包的依赖关系,yum 输出更直观易读。
校验软件包文件rpm -V 包名无对应命令校验已安装软件包的文件是否被篡改或损坏。
查看仓库列表无对应命令yum repolist查看当前启用的仓库列表及状态,rpm 无仓库概念。
清理缓存无对应命令yum clean all清理 yum 缓存的旧元数据,修改仓库文件后必须执行。
重建元数据缓存无对应命令yum makecache重新生成仓库元数据缓存,使新仓库配置立即生效。

使用建议:日常安装、升级、卸载优先使用 yum,由其自动处理依赖;对已安装包做精细查询(如文件列表、配置文件、校验)时使用 rpm 更直接高效。

8. 总结与参考资料

本文围绕 Linux 下 rpm 与 yum 两大包管理工具,系统梳理了命令文件位置、软件包安装后的目录结构、rpm 实操、本地源与网络源配置、常用命令以及综合实战案例。下面从适用场景、配置要点和常用命令三个维度做简要总结,并给出供深入学习的参考资料。

8.1 总结

  • 优先使用 yum 处理依赖:rpm 安装软件时不处理依赖包,遇到依赖关系会安装失败;yum 能自动解析并安装依赖,日常安装、升级、卸载应优先使用 yum。
  • 本地源配置关键步骤:先挂载光盘镜像到 /mnt,再备份并迁移旧仓库文件,创建指向挂载目录的 local.repo(baseurl 使用 file:///mnt),最后执行 yum clean all 和 yum makecache 刷新缓存。
  • 常见错误排查思路:baseurl 路径错误、gpgcheck 验证失败、缓存未清理导致仓库信息不更新是三大高频问题,分别通过核对挂载路径、关闭或导入签名、清理并重建缓存解决。
  • 本地源与网络源按需选择:内网离线环境优先使用本地源,保证安装稳定可靠;有外网访问权限的环境推荐使用网络源,以获得更丰富的软件包和及时的安全更新。
  • 常用命令速查:安装用 yum install -y 包名,卸载用 yum remove -y 包名,升级用 yum update -y 包名,查询用 yum list / yum info / yum search,精细查询已安装包用 rpm -q / rpm -ql / rpm -qc。

8.2 参考资料

如需进一步深入学习,推荐查阅以下官方文档与权威资源:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值