Lazy loaded image
运维
Linux之软件包管理
字数 3415阅读时长 9 分钟
2026-2-16
2026-2-16
author
type
Post
status
Published
date
Feb 16, 2026
slug
summary
tags
Linux
category
运维
icon
password

一、软件包的分类

Linux 中的软件包主要分为两大类:二进制包源码包。不同类型的包安装方式和管理工具有所不同。
类型
特点
安装方式
典型格式
二进制包(Binary Package)
预先编译好的程序,直接可运行
使用 RPM/YUM 管理
.rpm
源码包(Source Code Package)
源代码文件(如 C/C++),需自行编译
./configure && make && make install
.tar.gz, .tar.xz
脚本包(Script-based Installer)
封装了安装逻辑的 Shell/Python 脚本
直接运行脚本完成安装
.sh, 自定义 bin 包

🔍 对比总结

方面
RPM/YUM 包
源码包
脚本包
安装速度
快(无需编译)
慢(需编译)
一般
系统集成
强(记录到数据库)
弱(不被包管理器追踪)
弱或中等
升级卸载
支持良好
手动处理困难
取决于脚本设计
定制性
低(固定配置)
高(可选功能)
中等
安全性
高(签名验证)
依赖用户判断
依赖来源可信度
✅ 推荐原则:
  • 日常使用优先选择 YUM/RPM
  • 特殊需求(最新版、定制模块)考虑 源码包
  • 第三方工具(如 Docker CE、Node.js)常用 脚本包 + YUM 混合

二、RPM 包管理(底层命令)

rpm 是 Red Hat 系列系统中的底层包管理工具,用于直接安装、查询、卸载 .rpm 格式的二进制包。
⚠️ 不推荐跳过依赖直接使用 RPM 安装大型软件!

🛠️ 常用 RPM 命令语法

✅ 主要功能与示例

功能
命令示例
说明
安装软件包
sudo rpm -ivh package.rpm
-i: 安装, -v: 显示过程, -h: 进度条
升级软件包
sudo rpm -Uvh package.rpm
-U: 升级,若未安装则自动安装
删除软件包
sudo rpm -e package_name
注意不是文件名,而是包名(如 httpd)
查询是否已安装
rpm -q package_name
query
查询所有已安装包
rpm -qa \| grep keyword
-qa = query all
查询某个文件属于哪个包
rpm -qf /path/to/file
useful for troubleshooting
查询包的详细信息
rpm -qi package_name
查看版本、描述、安装时间等
查询包包含哪些文件
rpm -ql package_name
list files
查询未安装包的信息
rpm -qpi package.rpm
查看 .rpm 文件元数据
查询未安装包含文件
rpm -qpl package.rpm
示例:

⚠️ RPM 的局限性

  • 不自动解决依赖关系
    • 若缺少依赖库,会报错中断。
  • 容易造成“依赖地狱”
    • 手动下载多个 RPM 文件逐个安装非常繁琐。
🔧 解决方案:使用更高层的包管理器 —— YUM 或 DNF

三、YUM/DNF 在线包管理(推荐方式)

YUM(Yellowdog Updater Modified)是基于 RPM 的高级包管理器,能自动从网络仓库下载软件及其依赖并安装。
💡 CentOS 7/8 使用 yum,RHEL 8+ / Rocky Linux 9+ 推荐使用 dnf(更现代,性能更好)

✅ 常用 YUM 命令

功能
命令示例
搜索软件包
yum search nginx
查看软件包信息
yum info httpd
安装软件包
sudo yum install httpd
安装本地 RPM 包(自动补依赖)
sudo yum localinstall package.rpm
升级单个软件
sudo yum update httpd
升级所有可更新软件
sudo yum update
删除软件包
sudo yum remove httpd
列出已安装包
yum list installed
列出可用包
yum list available
查看软件包来自哪个仓库
yum info vsftpd
清理缓存
sudo yum clean all
重建元数据缓存
sudo yum makecache
示例:

🌐 1. 网络 YUM 源(常用在线仓库)

网络 YUM 源是从互联网上的官方或镜像站点下载元数据和 RPM 包的软件仓库。系统默认已经配置了基础仓库。

默认启用仓库(以 CentOS 7/8 为例)

仓库名称
说明
base
主要操作系统组件
updates
安全更新和补丁
extras
额外实用工具(如 epel-release
centosplus
增强功能包(谨慎启用)
查看当前启用的仓库:
查看所有仓库(含未启用):

更换为国内高速镜像源(提升速度)

以更换为阿里云镜像为例:
✅ 国内推荐镜像站:

💿 2. 光盘 YUM 源(本地源·适用于断网环境)

当服务器无法联网时,可使用系统安装光盘(ISO)作为本地 YUM 源进行软件安装。

步骤一:挂载光盘镜像

将 CentOS 安装 ISO 文件挂载到目录(物理机插入光盘同理):
验证是否成功:

步骤二:创建本地 repo 配置文件

输入以下内容:
⚠️ 注意路径是 file:///(三个斜杠),且目录需有执行权限

步骤三:加载本地源

现在就可以在无网络环境下安装光盘中的软件包了:

🔁 卸载与重新挂载(可选)

使用完后取消挂载:
下次需要时再重新挂载即可。
💡 提示:可用于灾备恢复、内网批量部署等场景

📦 3. YUM 包离线下载(用于隔离网络之间的迁移安装)

有些情况下,目标服务器不能联网,但你可以从一台能上网的机器上 提前下载 RPM 包及其依赖,然后通过 U 盘、内网传输等方式拷贝过去安装。

方法一:仅下载不安装(-downloadonly

在能联网的同版本系统中执行:
完成后你会得到多个 .rpm 文件,例如:
⚠️ 注意:必须确保目标系统架构(x86_64/arm64)、系统版本一致!

方法二:使用 yumdownloader(更灵活)

安装工具(若未自带):
下载指定包及依赖:

在目标主机上安装离线包

将整个目录拷贝至目标服务器后,使用 yum localinstall 自动解决依赖顺序:
✅ 优势:yum localinstall 能自动识别依赖关系,比直接 rpm -ivh 更安全可靠!

高级技巧:打包成自定义本地仓库(适用于多台服务器)

如果你有多个离线服务器,可以将这些 RPM 包构建成一个私有小型 YUM 仓库。

步骤如下:

之后就可以像使用普通 YUM 源一样安装:
🏗️ 应用场景:企业内网统一软件源、安全区批量部署、CI/CD 离线构建节点

🧩 补充:YUM 常用高级选项

命令
作用
yum history
查看安装/卸载历史记录
yum history undo N
回滚第 N 次操作(非常有用!)
yum --assumeyes install package
自动确认安装(脚本中常用 -y
yum --skip-broken check-update
检查更新时跳过损坏仓库
yum shell
进入交互式 YUM 命令行,批量操作
示例:撤销一次误删操作

🔐 GPG 密钥验证机制说明

YUM 默认开启 gpgcheck=1,用于验证软件包完整性与来源合法。
导入官方 GPG 公钥(通常自动完成):
查看已导入密钥:
⚠️ 生产环境中不要随意关闭 gpgcheck

✅ 总结对比表:三种 YUM 源适用场景
类型
是否需要网络
适合场景
维护难度
网络 YUM 源
✔️ 需要
日常维护、频繁更新
光盘 YUM 源
❌ 不需要(本地介质)
应急安装、无网环境
离线包 + Local Repo
❌ 目标机无需联网
内网部署、安全区
中高

四、源码包管理(手动编译安装)

当你需要:
  • 使用软件的最新版本
  • 自定义编译选项(如启用 SSL、关闭调试)
  • 某些软件没有提供 RPM 包
就需要使用 源码包安装

📦 获取方式

通常为压缩包形式:

🧰 编译安装三步曲

参数详解

步骤
详细说明
./configure
–prefix=/usr/local/nginx
设置安装路径
–enable-ssl
启用 HTTPS 支持
–with-http_v2_module
启用 HTTP/2
make
根据 Makefile 编译所有源文件
make install
将编译好的文件复制到目标目录
示例:编译安装 Nginx

⚠️ 源码包注意事项

  • ❗ 不被 RPM/YUM 记录,无法通过 rpm -q 查询
  • ❗ 升级和卸载需手动操作(删除整个目录)
  • ❗ 依赖库需提前安装(如 gcc, openssl-devel)
✅ 建议做法:
  • 写安装日志文档
  • 将源码包和脚本集中存放
  • 使用 checkinstall 工具生成 RPM 包(可选)

五、脚本包管理(自动化安装包)

有些软件厂商为了简化安装流程,提供一个“一键安装”脚本(常见为 .sh),内部封装了:
  • 仓库添加
  • GPG 密钥导入
  • 包安装命令
  • 服务启动等操作

🎯 常见脚本包示例

软件
安装命令
Docker CE
curl -fsSL <https://get.docker.com> \| sh
NodeSource Node.js
curl -fsSL <https://deb.nodesource.com/setup_18.x> \| sudo bash -
GitLab Runner
wget -O - <https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh> \| sudo bash

🔍 脚本包的工作原理(以 Docker 为例)

  1. 下载官方安装脚本
  1. 脚本自动检测系统版本(CentOS/Ubuntu)
  1. 添加对应的 YUM/Apt 仓库
  1. 导入 GPG 公钥保证包完整性
  1. 安装 docker-ce 软件包
  1. 启动 docker 服务并设置开机自启

⚠️ 安全提醒:谨慎运行未知脚本!


📌 实用场景示例

✅ 场景 1:从零搭建 LAMP 环境(YUM 方式)


✅ 场景 2:手动编译安装高版本 GCC(源码包)


✅ 场景 3:安全安装 Docker CE(脚本包 + 审核)


✅ 场景 4:只查看某个包会安装哪些文件(YUM + RPM)


📘 学习建议

  1. 日常优先使用 YUM/DNF
      • 安全、便捷、自动处理依赖。
  1. 🔍 理解 RPM 数据库的作用
      • 所有通过 RPM/YUM 安装的包都记录在 /var/lib/rpm 中。
  1. 🧪 实验环境练习源码编译
      • 在虚拟机中尝试编译 Nginx、SQLite 等简单项目。
  1. 🔐 绝不随意执行远程脚本
      • 一定要先审查 install.sh 内容再运行。
  1. 📦 了解主流第三方仓库
      • 如 EPEL、Remi、Docker 官方源,提升软件获取效率。
  1. 🤖 尝试编写自己的安装脚本
      • 自动化部署常用工具链。
上一篇
Linux 磁盘与文件系统管理
下一篇
Linux之文件权限管理
目录