在服务器运维领域,CentOS 7 以其卓越的稳定性和与 Red Hat Enterprise Linux (RHEL) 的兼容性,长期以来都是首选的操作系统之一,无论是搭建 Web 服务、数据库,还是部署应用环境,第一步往往都是在系统上安装所需的软件,掌握在 CentOS 7 上安装软件的多种方法,是每一位系统管理员和开发者的基本功,本文将系统性地介绍三种主流的安装方式:使用 yum 包管理器、安装 RPM 包,以及通过源代码编译安装,并分析它们的优劣与适用场景。

yum 包管理器:最便捷的官方途径
yum(Yellowdog Updater, Modified)是 CentOS 7 默认的、也是最重要的软件包管理工具,它基于 RPM(Red Hat Package Manager)包格式,但最大的优势在于能够自动处理软件包之间的依赖关系,极大地简化了安装和管理过程。
yum 的核心概念
yum 的工作依赖于“仓库”,仓库是一个存储了大量 RPM 软件包及其元数据(如版本、依赖关系等)的集合。yum 会从配置好的仓库中下载软件包进行安装,CentOS 7 默认配置了几个官方仓库,如 Base(基础软件包)、Updates(更新软件包)和 Extras(额外软件包),对于许多不在官方仓库中的常用软件(如 Nginx、htop 等),我们可以启用 EPEL(Extra Packages for Enterprise Linux)仓库,它为 RHEL 系列系统提供了大量高质量的额外软件包。
常用 yum 命令详解
熟练使用 yum 命令是高效管理 CentOS 7 的关键,以下是一些最常用的操作:
- 安装软件包:
yum install <package_name>安装 Apache Web 服务器:yum install httpd - 更新所有软件包:
yum update此命令会列出所有可更新的软件包,并询问用户是否确认更新,定期执行此操作是保持系统安全和稳定的重要手段。 - 更新指定软件包:
yum update <package_name> - 搜索软件包:
yum search <keyword>当不确定软件包的准确名称时,可以使用关键词搜索,搜索与 Python 相关的包:yum search python - 查看软件包信息:
yum info <package_name>在安装前,可以查看软件包的详细描述、版本、大小等信息。 - 卸载软件包:
yum remove <package_name>此命令会卸载指定的软件包,但通常不会删除其配置文件,以免影响后续重装。 - 列出已安装的软件包:
yum list installed
在开始使用 yum 安装额外软件前,建议先安装 EPEL 仓库:
yum install epel-release
RPM 包安装:直接处理 .rpm 文件
有时,我们可能无法通过 yum 仓库获取到某个软件,例如需要安装一个特定旧版本,或者在一个没有网络连接的离线环境中进行部署,这时,直接安装 RPM 文件就成为了一种选择。
何时使用 RPM
- 离线安装:在有网络的机器上下载好
.rpm文件及其所有依赖包,然后传输到目标服务器进行安装。 - 特定版本需求:
yum仓库通常只提供特定版本的软件,而你可能需要安装一个仓库中没有的旧版或新版。 - 测试和开发:软件官方可能直接提供
.rpm文件用于快速测试。
rpm 命令基础
与 yum 不同,rpm 命令本身不具备自动解决依赖的能力,这是它与 yum 最核心的区别。

- 安装 RPM 包:
rpm -ivh <package_file.rpm>-i表示安装。-v显示详细信息。-h显示安装进度条。
- 升级 RPM 包:
rpm -Uvh <package_file.rpm> - 卸载 RPM 包:
rpm -e <package_name>注意,这里使用的是软件包名称,而不是文件名。 - 查询已安装的 RPM 包:
rpm -qa | grep <keyword>查询系统中是否安装了httpd:rpm -qa | grep httpd
使用 rpm 安装时,如果缺少依赖,系统会明确报错,列出缺失的依赖包名称,你需要手动去寻找并安装这些依赖包,过程相对繁琐。
源代码编译安装:最高度的定制化
当 yum 和 RPM 都无法满足需求时,例如你需要对软件进行深度定制(开启/关闭特定功能、针对特定硬件优化等),源代码编译安装是终极解决方案。
编译安装的优势与挑战
- 优势:
- 高度灵活:可以通过
configure脚本的参数精确控制软件的功能和安装路径。 - 版本最新:可以直接从软件的官方网站获取最新的源代码进行编译。
- 性能优化:可以针对当前服务器的 CPU 架构进行编译优化,理论上能获得更好的性能。
- 高度灵活:可以通过
- 挑战:
- 过程复杂:需要安装编译环境(如 GCC、make 等),并手动解决编译过程中的依赖问题。
- 管理困难:编译安装的软件不会被
yum或rpm识别,升级和卸载都比较麻烦。 - 耗时较长:编译大型软件(如 MySQL、PHP)需要相当长的时间。
编译安装“三步曲”
标准的编译安装流程通常遵循“三步曲”模式:
- 配置:
./configure执行源码目录下的configure脚本,它会检查系统环境、依赖库是否存在,并根据用户指定的参数(如--prefix=/usr/local/app来指定安装目录)生成Makefile文件。 - 编译:
make根据Makefile文件的指示,调用编译器将源代码编译成可执行的二进制文件。 - 安装:
make install将编译好的文件和相应的配置文件、文档等复制到configure阶段指定的目标目录中。
在开始编译前,请确保已安装“Development Tools”工具组:
yum groupinstall "Development Tools"
三种安装方式对比
为了更直观地理解这三种方法的差异,下表进行了小编总结对比:
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
yum 安装 |
自动解决依赖、管理方便、操作简单、官方维护 | 软件版本可能滞后、定制性差 | 绝大多数日常应用安装,追求稳定和便捷 |
| RPM 安装 | 离线可用、可安装特定版本 | 需手动解决依赖关系,过程繁琐 | 离线环境、安装特定版本软件包 |
| 源码编译 | 版本最新、高度可定制、性能可优化 | 过程复杂、耗时长、难以管理和卸载 | 需要深度定制软件功能、或无其他安装途径时 |
相关问答FAQs
问题1:使用 yum install 安装软件时,提示 "No package available" 怎么办?

解答:这个问题很常见,通常由以下几种原因导致:
- 名称错误:首先检查你输入的软件包名称是否正确,可以使用
yum search <关键词>来搜索准确的包名。 - 仓库未启用:执行
yum repolist查看当前已启用的仓库列表,如果所需软件在某个未被启用的仓库中(如 EPEL),你需要先安装并启用它,执行yum install epel-release来启用 EPEL 仓库。 - 软件不在标准仓库:某些软件可能不在 CentOS 7 的官方仓库或 EPEL 仓库中,这时,你可能需要寻找该软件的官方网站,看是否提供第三方
yum源、RPM 安装包或源代码。
问题2:通过源代码编译安装的软件,应该如何进行卸载或升级?
解答:这是编译安装的主要痛点,最佳实践是在编译安装时记录下所有信息。
- 理想方式:如果你保留了原始的源代码目录,并且没有对其进行
make clean操作,那么可以进入该目录,执行make uninstall命令,这个命令会读取Makefile中的记录,将安装的文件删除。 - 现实情况:很多时候,源码目录已被删除,只能手动卸载,如果你在
configure阶段使用了--prefix参数指定了安装目录(/usr/local/myapp),那么直接删除这个目录即可,如果没有指定,则需要根据软件的文档,手动查找并删除散落在系统各处的文件,这非常繁琐且容易出错。 - 升级:升级过程等同于重新安装一遍:下载新版本源码,执行
./configure、make和make install,新文件会覆盖旧文件,但旧的、不再被使用的文件可能会残留在系统中,对于需要频繁升级的软件,强烈推荐使用yum等包管理器进行管理。