Linux 软件管理完全指南
在 Linux 世界中,安装软件不像 Windows 那样双击
.exe文件那么简单。Linux 提供了多种软件管理方式:RPM 包、YUM 仓库、源码编译安装……每种方式都有其适用场景。很多新手在”装软件”这件事上踩坑无数:依赖关系报错、找不到安装包、编译失败……本文将系统讲解 RPM 包的基础知识、YUM 仓库的配置与使用、以及源码包编译安装的全流程。学完本章,安装软件将不再是难题。
概述
Linux 软件包的两种类型
Linux 软件包主要分为两大类:
| 类型 | RPM 包(二进制包) | 源码包(Source Code) |
|---|---|---|
| 是否需要编译 | 无需编译,直接使用 | 需要编译后才能运行 |
| 能否自定义配置 | 无法设定个人设置、开关功能 | 可以自定义配置和开关功能 |
| 安装速度 | 快 | 慢(需要编译时间) |
| 依赖处理 | YUM 可自动处理依赖 | 需要手动安装依赖 |
| 示例 | mysql-community-common-5.7.12-1.el7.x86_64.rpm | nginx-1.8.1.tar.gz |
认识 RPM 包
RPM 包的命名有严格的规范,理解命名规则能帮你快速判断软件包的兼容性。
RPM 包命名拆解
以 zip-3.0-11.el7.x86_64.rpm 为例:
zip - 3.0-11 . el7 . x86_64 . rpm
│ │ │ │ │
│ │ │ │ └── 文件后缀
│ │ │ └── 系统平台(32/64 位)
│ │ └── 发布版本(对应 CentOS/RedHat 版本)
│ └── 软件版本号
└── 软件包名
| 部分 | 示例值 | 说明 |
|---|---|---|
| 软件包名 | zip | 软件的名称 |
| 版本号(Version) | 3.0-11 | 软件的版本,格式为 主版本.次版本-修订号 |
| 发布版本(Release) | el7 | 对应 CentOS/RHEL 7 系统(el5→CentOS 5,el6→CentOS 6,el7→CentOS 7) |
| 系统平台 | x86_64 | 64 位系统(i386/i686 表示 32 位,noarch 表示不依赖架构) |
| 文件后缀 | .rpm | 包格式标识 |
更多示例:
wget-1.14-15.el7.x86_64.rpm
tcpdump-4.9.0-5.el7.x86_64.rpm
认识源码包
源码包的命名相对简单:
nginx - 1.8.1 . tar.gz
│ │ │
│ │ └── 压缩格式
│ └── 版本号
└── 包名
源码包通常以
.tar.gz、.tar.bz2、.tar.xz等格式发布,下载后需要解压 → 配置 → 编译 → 安装。
RPM 包管理:YUM 工具
YUM 简介
YUM(Yellow dog Updater, Modified)是一个在 Fedora、RedHat 和 CentOS 中使用的 Shell 前端软件包管理器。
YUM 的核心优势:
- 基于 RPM 包管理
- 能够从指定的服务器自动下载 RPM 包并安装
- 自动处理依赖关系,一次安装所有依赖的软件包
- 无需繁琐地一次次下载、安装
配置 YUM 仓库
YUM 仓库(Repository)是存放 RPM 包的服务器或本地目录。YUM 的配置文件位于:
/etc/yum.repos.d/ ← YUM 仓库配置文件目录
本地源:使用系统安装光盘
场景:在没有网络的环境下,使用 CentOS 安装光盘作为软件源。
步骤:备份官方 YUM 配置
[root@localhost ~]# mv /etc/yum.repos.d/* /tmp/
步骤:编写本地 YUM 库配置文件
[root@localhost ~]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name=dvd
baseurl=file:///mnt/cdrom
gpgcheck=0
配置文件详解:
| 配置项 | 示例值 | 说明 |
|---|---|---|
[dvd] | 仓库名称 | 中括号 [] 是必须的,自定义名称 |
name | dvd | 仓库的描述说明,必须的 |
baseurl | file:///mnt/cdrom | 下载库的具体地址,最重要的配置 |
gpgcheck | 0 | 关闭签名校验(0=关闭,1=开启) |
注意:配置文件中很容易打错字,特别是
baseurl和gpgcheck,务必仔细检查!
步骤:挂载安装光盘
千万记得要把光盘放到服务器上,并确保光驱已连接!
# 创建挂载点
[root@localhost ~]# mkdir /mnt/cdrom
# 手动挂载光驱
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
步骤:验证光盘内容
[root@localhost ~]# ls /mnt/cdrom/
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
能看到
Packages和repodata目录,说明挂载成功。
步骤:使用 YUM 安装软件
# 安装 Apache HTTP 服务器
[root@localhost ~]# yum install -y httpd
# 启动服务
[root@localhost ~]# systemctl start httpd
步骤:验证安装
打开虚拟机内的浏览器,输入 http://127.0.0.1,能看到 Apache 测试页面说明部署成功。

步骤:查看仓库信息
[root@localhost ~]# yum repolist
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
源标识 源名称 状态
dvd dvd 4,021
说明我们使用的是本地光驱中的软件包,共 4,021 个可用软件。
网络源:使用国内镜像源
前提:虚拟机需要联网,网络模式设置为 NAT。
# 例如ping百度测试网络连通性
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (183.2.172.177) 56(84) bytes of data.
64 bytes from 183.2.172.177 (183.2.172.177): icmp_seq=1 ttl=128 time=5.34 ms
64 bytes from 183.2.172.177 (183.2.172.177): icmp_seq=2 ttl=128 time=4.93 ms
64 bytes from 183.2.172.177 (183.2.172.177): icmp_seq=3 ttl=128 time=5.07 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 4.930/5.116/5.346/0.182 ms
场景:使用阿里云等国内镜像源,下载速度更快,软件包更全。
站点地址:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区
适合centos7的源地址:CentOS镜像-CentOS镜像下载安装-开源镜像站-阿里云
步骤:清理原有 YUM 配置
[root@localhost ~]# mv /etc/yum.repos.d/* /tmp/
步骤:下载阿里云 YUM 配置
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
第一个不行多半是因为你的系统没有安装wget这个软件工具,wget功能非常类似于迅雷下载,使用第二条命令结果也是一样的。
-O参数:指定输出文件名(大写字母 O,不是数字 0)。wget -O和curl -o效果类似。
步骤:更新 YUM 缓存
[root@localhost ~]# yum clean all
[root@localhost ~]# yum repolist
[root@localhost ~]# yum makecache
步骤:验证
可以打开看/etc/yum.repos.d/CentOS-Base.repo文件,可以看到baseurl带着aliyun的链接

EPEL 源:额外软件包
网页链接:Epel镜像-Epel镜像下载安装-开源镜像站-阿里云
EPEL(Extra Packages for Enterprise Linux):企业版 Linux 的额外软件包仓库。很多常用软件不在 CentOS 官方源中,但在 EPEL 中能找到。
# 如没有wget工具,现在就可以下载了
[root@localhost ~]# yum -y install wget
# 下载 EPEL 配置文件
[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
# 重建缓存
[root@localhost ~]# yum makecache
软件官方源:以 Nginx 为例
最佳实践:系统的更新和升级可以使用基础源(阿里云、163),但具体软件的安装建议使用官方源,能获取最新版本。
步骤:查找官方文档
访问 Nginx 官网 → Document(文档) → Install(安装) → Packages(包说明)
步骤:根据提示创建 YUM 配置文件
Nginx 官方会提供 .repo 配置文件的模板,按照提示创建即可。
步骤:安装教程示例如下
#安装说明
#在你第一次在新机器上安装nginx之前,你需要先 建立NGINX软件包仓库。 之后,你可以从仓库安装并更新nginx。
#RHEL及其衍生产品
#本节适用于红帽企业Linux及其衍生版本,如 CentOS、Oracle Linux、Rocky Linux、AlmaLinux。
#安装先决条件:
sudo yum install yum-utils
# 要设置 yum 仓库,创建以下内容的文件:/etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
#默认情况下,稳定的nginx包仓库被使用。 如果你想使用主线nginx软件包, 执行以下命令:
sudo yum-config-manager --enable nginx-mainline
#安装nginx时,请执行以下命令:
sudo yum install nginx
使用 YUM 管理 RPM 包
安装软件
全新安装:
# 网络测试
[root@localhost ~]# ping www.baidu.com
# 安装单个或多个软件包
[root@localhost ~]# yum -y install httpd vsftpd
| 参数 | 说明 |
|---|---|
yum | 主命令 |
-y | 自动确认(无需手动按 y) |
install | 安装操作 |
httpd | 软件包 1 |
vsftpd | 软件包 2 |
重新安装(修复缺失文件):
[root@localhost ~]# yum -y reinstall httpd
升级软件:
# 升级单个软件
[root@localhost ~]# yum -y update httpd
# 升级所有软件
[root@localhost ~]# yum -y update
查询软件
# 查询 YUM 源列表
[root@localhost ~]# yum repolist
# 查询某个软件包的状态
[root@localhost ~]# yum list httpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
已安装的软件包
httpd.x86_64 2.4.6-88.el7.centos @dvd
可安装的软件包
httpd.x86_64 2.4.6-99.el7.centos.1 update
判断是否已安装:带
@符号表示已经安装的软件包。httpd.x86_64 2.4.6-88.el7.centos @dvd
卸载软件
[root@localhost ~]# yum -y remove httpd
remove会卸载指定的软件,同时移除其依赖的其他软件(如果有)。
实用技巧:查询命令来自哪个软件包
当你使用某个命令时发现”命令不存在”,又不知道需要安装哪个包:
# 场景:ifconfig 命令失效了,不知道如何安装
# 查询命令的提供者
[root@localhost ~]# yum provides ifconfig
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
net-tools-2.0-0.24.20131004git.el7.x86_64 : Basic networking tools
源 :@anaconda
匹配来源:
文件名 :/usr/sbin/ifconfig
# 安装对应的工具包
[root@localhost ~]# yum -y install net-tools-2.0-0.24.20131004git.el7.x86_64
yum provides是排障利器!任何”找不到命令”的场景都可以用它来找到对应的软件包。
RPM 包管理:RPM 工具
简介
RPM(Red Hat Package Manager)是管理 RPM 包的基础工具。
| 特性 | 说明 |
|---|---|
| 功能 | 与 YUM 功能相同,管理 RPM 包 |
| 优点 | 不需要配置,直接使用 |
| 缺点 | 无法自动解决依赖关系 |
| 下载 | 无法自行下载软件包,需要手动获取 |
适用场景:当你有现成的 .rpm 文件,或者在无网络环境下安装软件时使用。
安装软件(-i)
# 先挂载光盘,找到安装包
[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom
# 进入 Packages 目录
[root@localhost ~]# cd /mnt/cdrom/Packages
# 检查软件包是否存在
[root@localhost Packages]# ls wget*
wget-1.14-18.el7.x86_64.rpm
# 安装 RPM 包
[root@localhost Packages]# rpm -ivh wget-1.14-18.el7.x86_64.rpm
| 参数 | 说明 |
|---|---|
-i | 安装(install) |
-v | 显示详细信息(verbose) |
-h | 显示安装进度条(hash) |
安装输出示例:
[root@localhost Packages]# rpm -ivh wget-1.14-18.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:wget-1.14-18.el7 ################################# [100%]
如有关于签名警告:
NOKEY警告不影响安装,只是说明系统没有导入对应的 GPG 密钥。可以通过以下命令导入:rpm --import /mnt/cdrom/RPM-GPG-KEY-CentOS-7
查询软件(-q)
[root@localhost Packages]# rpm -q wget
wget-1.14-18.el7.x86_64
| 参数 | 说明 |
|---|---|
-q | 查询(query) |
判断:能看到软件包名称,说明已安装。如果未安装,会显示
未安装软件包 wget。
更多查询方式:
# 查询所有已安装的 RPM 包
[root@localhost ~]# rpm -qa
# 查询某个包是否安装
[root@localhost ~]# rpm -q httpd
# 查询软件包安装了哪些文件
[root@localhost ~]# rpm -ql httpd
# 查询软件包的信息
[root@localhost ~]# rpm -qi httpd
# 查询某个文件属于哪个软件包
[root@localhost ~]# rpm -qf /etc/httpd/conf/httpd.conf
卸载软件(-e)
[root@localhost Packages]# rpm -evh wget
| 参数 | 说明 |
|---|---|
-e | 卸载(erase) |
-v | 显示详细信息 |
-h | 显示进度条 |
输出示例:
[root@localhost Packages]# rpm -evh wget
准备中... ################################# [100%]
正在清理/删除...
1:wget-1.14-18.el7_6.1 ################################# [100%]
验证卸载结果:
[root@localhost Packages]# rpm -q wget
未安装软件包 wget
注意:如果软件被其他软件依赖,RPM 会拒绝卸载。此时可以使用
--nodeps强制卸载(不推荐):rpm -e --nodeps 软件包名
YUM vs RPM 对比
| 对比维度 | YUM | RPM |
|---|---|---|
| 依赖处理 | 自动解决依赖关系 | 不处理依赖,需手动安装 |
| 软件来源 | 从仓库自动下载 | 需要手动提供 .rpm 文件 |
| 配置需求 | 需要配置 YUM 源 | 无需配置 |
| 安装命令 | yum install -y 包名 | rpm -ivh 包名.rpm |
| 查询命令 | yum list 包名 | rpm -q 包名 |
| 卸载命令 | yum remove 包名 | rpm -e 包名 |
| 升级命令 | yum update 包名 | rpm -Uvh 包名.rpm |
日常使用建议:优先使用 YUM,只在无网络或特殊场景下使用 RPM。
源码包管理
获得源码包
从官方网站可以获取最新的源码包:
| 软件 | 官网 |
|---|---|
| Apache | www.apache.org |
| Nginx | www.nginx.org |
| Tengine | tengine.taobao.org |
实战案例:编译安装 Tengine
Tengine 是由淘宝发起的 Nginx 增强版本,在 Nginx 基础上添加了大量高级功能和特性。
下载 Tengine 源码包
[root@localhost ~]# wget http://tengine.taobao.org/download/tengine-2.2.0.tar.gz
安装编译环境和依赖
[root@localhost ~]# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel
依赖说明:
| 依赖包 | 作用 |
|---|---|
gcc | C 语言编译器 |
make | 编译构建工具 |
zlib-devel | 压缩库支持 |
pcre / pcre-devel | 正则表达式库(Nginx 重写规则需要) |
openssl-devel | SSL/TLS 加密库支持(HTTPS 需要) |
解压源码包
# 创建运行用户
[root@localhost ~]# useradd www
# 解压
[root@localhost ~]# tar xvf tengine-2.2.0.tar.gz
[root@localhost ~]# cd tengine-2.2.0
配置编译选项(configure)
# 第一种方式:看着整洁干净
[root@localhost tengine-2.2.0]# ./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx
# 第二种方式:不换行输入,注意空格即可
[root@localhost tengine-2.2.0]# ./configure --user=www --group=www --prefix=/usr/local/nginx
| 配置项 | 说明 |
|---|---|
--user=www | 指定运行用户 |
--group=www | 指定运行用户组 |
--prefix=/usr/local/nginx | 指定安装路径 |
注意:参数之间注意空格和换行符(
\用于换行)。./configure会检查系统环境并生成 Makefile 文件。
编译(make)
[root@localhost tengine-2.2.0]# make
make会根据 Makefile 文件调用 gcc 编译器将源代码编译成可执行文件。这个过程可能需要几分钟。
安装(make install)
[root@localhost tengine-2.2.0]# make install
make install将编译好的文件复制到--prefix指定的安装目录。
启动并测试
# 如果之前安装过 httpd,需要先关闭避免端口冲突
[root@localhost ~]# systemctl stop httpd
# 启动 Tengine
[root@localhost tengine-2.2.0]# /usr/local/nginx/sbin/nginx
# 关闭防火墙(方便测试)
[root@localhost tengine-2.2.0]# systemctl stop firewalld
验证部署:
打开浏览器访问 http://127.0.0.1,如果能看到 Nginx/Tengine 的欢迎页面,说明部署成功!

源码编译安装通用流程
1. 下载源码包(.tar.gz)
↓
2. 安装编译环境和依赖(gcc, make 等)
↓
3. 解压源码包(tar xvf)
↓
4. 配置编译选项(./configure --prefix=...)
↓
5. 编译(make)
↓
6. 安装(make install)
↓
7. 配置并启动服务
记忆口诀:解压 → 配置 → 编译 → 安装(configure → make → make install)
常见问题
Q1:yum install 报错 “No package xxx available” 怎么办?
- 检查网络是否正常:
ping www.baidu.com - 检查 YUM 源配置是否正确:
yum repolist - 清除缓存后重试:
yum clean all && yum makecache - 如果软件不在官方源中,尝试添加 EPEL 源
Q2:RPM 安装时提示依赖缺失怎么办?
# 错误示例
error: Failed dependencies:
libc.so.6()(64bit) is needed by xxx
# 解决办法1:去找这个依赖的rpm包安装,但是有时依赖需要依赖的依赖,一直套娃,部署非常麻烦
# 解决办法2:使用 YUM 安装(自动处理依赖)
yum localinstall -y xxx.rpm
技巧:
yum localinstall可以安装本地的.rpm文件,同时自动解决依赖关系。
Q3:./configure 报错缺少某个库怎么办?
# 错误示例
./configure: error: the HTTP rewrite module requires the PCRE library.
# 解决办法:安装对应的 -devel 包
yum install -y pcre-devel
一般缺少某个库,安装对应的
-devel开发包即可。
Q4:如何查看 YUM 安装了哪些文件?
[root@localhost ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf/httpd.conf
/usr/sbin/httpd
...
Q5:源码安装后如何卸载?
源码安装的文件通常都在 --prefix 指定的目录下,直接删除即可:
[root@localhost ~]# rm -rf /usr/local/nginx
建议:编译前用
checkinstall替代make install,可以生成 RPM 包方便管理。
最佳实践
软件安装优先级
YUM 安装 > 源码编译安装 > RPM 手动安装- 能用 YUM 就用 YUM(自动处理依赖)
- 需要自定义功能时选择源码编译
- 无网络环境下使用 RPM
定期更新系统
# 安全更新(推荐生产环境使用)
yum update --security
# 全量更新(测试环境)
yum update -y使用官方源获取最新版本
- 系统基础组件使用阿里云/163 源
- 数据库、Web 服务器等核心软件使用官方源
编译安装前备份
# 编译前记录当前状态
rpm -qa | sort > /root/before-nginx-install.txt源码安装的软件做好服务管理
# 创建 systemd 服务文件
vim /usr/lib/systemd/system/nginx.service
# 这样就可以用 systemctl start/stop/restart nginx
总结
通过本章节的学习,你应该掌握了:
- 理解 RPM 包和源码包的区别
- 识别 RPM 包的命名规范(名称、版本、发布版本、平台)
- 配置本地 YUM 源(使用系统安装光盘)
- 配置网络 YUM 源(阿里云、EPEL、软件官方源)
- 使用 YUM 安装、查询、升级、卸载软件
- 使用
yum provides查找命令所属的软件包 - 使用 RPM 工具进行安装、查询、卸载操作
- 理解 YUM 和 RPM 的区别和使用场景
- 从官方网站获取源码包
- 掌握源码编译安装的完整流程(configure → make → make install)
- 独立完成 Tengine/Nginx 的编译安装
学习建议:软件管理是 Linux 运维的基础技能。建议在自己的虚拟机上多练习:搭建本地 YUM 源、配置阿里云源、编译安装一个软件。实际操作一遍,远胜于阅读十遍文档!