云计算基础-9:Linux软件管理

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.rpmnginx-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_6464 位系统(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]仓库名称中括号 [] 是必须的,自定义名称
namedvd仓库的描述说明,必须的
baseurlfile:///mnt/cdrom下载库的具体地址,最重要的配置
gpgcheck0关闭签名校验(0=关闭,1=开启)

注意:配置文件中很容易打错字,特别是 baseurlgpgcheck,务必仔细检查!

步骤:挂载安装光盘

千万记得要把光盘放到服务器上,并确保光驱已连接!

# 创建挂载点
[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

能看到 Packagesrepodata 目录,说明挂载成功。

步骤:使用 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 -Ocurl -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(包说明)

站点:nginx:Linux 软件包

步骤:根据提示创建 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 对比

对比维度YUMRPM
依赖处理自动解决依赖关系不处理依赖,需手动安装
软件来源从仓库自动下载需要手动提供 .rpm 文件
配置需求需要配置 YUM 源无需配置
安装命令yum install -y 包名rpm -ivh 包名.rpm
查询命令yum list 包名rpm -q 包名
卸载命令yum remove 包名rpm -e 包名
升级命令yum update 包名rpm -Uvh 包名.rpm

日常使用建议:优先使用 YUM,只在无网络或特殊场景下使用 RPM


源码包管理

获得源码包

从官方网站可以获取最新的源码包:

软件官网
Apachewww.apache.org
Nginxwww.nginx.org
Tenginetengine.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

依赖说明:

依赖包作用
gccC 语言编译器
make编译构建工具
zlib-devel压缩库支持
pcre / pcre-devel正则表达式库(Nginx 重写规则需要)
openssl-develSSL/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” 怎么办?

  1. 检查网络是否正常:ping www.baidu.com
  2. 检查 YUM 源配置是否正确:yum repolist
  3. 清除缓存后重试:yum clean all && yum makecache
  4. 如果软件不在官方源中,尝试添加 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 包方便管理。


最佳实践

  1. 软件安装优先级

    YUM 安装 > 源码编译安装 > RPM 手动安装
    • 能用 YUM 就用 YUM(自动处理依赖)
    • 需要自定义功能时选择源码编译
    • 无网络环境下使用 RPM
  2. 定期更新系统


    # 安全更新(推荐生产环境使用)
    yum update --security

    # 全量更新(测试环境)
    yum update -y

  3. 使用官方源获取最新版本

    • 系统基础组件使用阿里云/163 源
    • 数据库、Web 服务器等核心软件使用官方源
  4. 编译安装前备份


    # 编译前记录当前状态
    rpm -qa | sort > /root/before-nginx-install.txt

  5. 源码安装的软件做好服务管理


    # 创建 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 源、配置阿里云源、编译安装一个软件。实际操作一遍,远胜于阅读十遍文档!


🙋 学习路上不孤单,有坑一起填!



卡在参数调试、命令打架、功能没反应、资源失效?其他问题?直接戳我,也可以进群和同好交流!



📱 个人QQ:3838586495    👥 交流Q群:1094091455    📮 邮箱:leyan2504@163.com



内容帮你省了大把踩坑时间?可以文末小小打赏鼓励一波,也欢迎安利给身边学习的朋友~



✨ 欢迎来评论区「交作业」:分享你的配置思路、提出疑难问题;评论区正确填写邮箱,不错过任何人的解答回复!


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇