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 | 增强功能包(谨慎启用) |
查看当前启用的仓库:
查看所有仓库(含未启用):
更换为国内高速镜像源(提升速度)
以更换为阿里云镜像为例:
✅ 国内推荐镜像站:
- 清华大学开源镜像站:https://mirrors.tuna.tsinghua.edu.cn
💿 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 包
就需要使用 源码包安装。
📦 获取方式
通常为压缩包形式:
下载地址:https://httpd.apache.org, https://nginx.org 等官网
🧰 编译安装三步曲
参数详解
步骤 | 详细说明 |
./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 为例)
- 下载官方安装脚本
- 脚本自动检测系统版本(CentOS/Ubuntu)
- 添加对应的 YUM/Apt 仓库
- 导入 GPG 公钥保证包完整性
- 安装
docker-ce软件包
- 启动
docker服务并设置开机自启
⚠️ 安全提醒:谨慎运行未知脚本!
📌 实用场景示例
✅ 场景 1:从零搭建 LAMP 环境(YUM 方式)
✅ 场景 2:手动编译安装高版本 GCC(源码包)
✅ 场景 3:安全安装 Docker CE(脚本包 + 审核)
✅ 场景 4:只查看某个包会安装哪些文件(YUM + RPM)
📘 学习建议
- ✅ 日常优先使用 YUM/DNF
- 安全、便捷、自动处理依赖。
- 🔍 理解 RPM 数据库的作用
- 所有通过 RPM/YUM 安装的包都记录在
/var/lib/rpm中。
- 🧪 实验环境练习源码编译
- 在虚拟机中尝试编译 Nginx、SQLite 等简单项目。
- 🔐 绝不随意执行远程脚本
- 一定要先审查
install.sh内容再运行。
- 📦 了解主流第三方仓库
- 如 EPEL、Remi、Docker 官方源,提升软件获取效率。
- 🤖 尝试编写自己的安装脚本
- 自动化部署常用工具链。
- 作者:NotionNext
- 链接:https://tangly1024.com/article/309db897-8f81-8033-9ce9-d7f71d3ec1ca
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。











