3.1 Linux 软件包的四大封装类型及核心特性

封装类型 文件后缀 核心特性 适用发行版 核心管理工具 优势 劣势
RPM 包 *.rpm 预编译二进制包,RPM 系标准格式 RHEL、CentOS、openEuler、openSUSE rpm、yum、DNF 免编译,安装速度快;版本标准化;包管理器自动解决依赖 版本可能滞后;功能定制性差;仅适用于 RPM 系
DEB 包 *.deb 预编译二进制包,Debian 系标准格式 Ubuntu、Debian、Linux Mint dpkg、apt 免编译,安装速度快;依赖管理严格;Ubuntu 生态软件丰富 仅适用于 Debian 系;跨发行版兼容性差
源代码包(TarBall) .tar.gz/.tar.bz2 软件原始代码,未编译 所有 Linux 发行版(通用) gcc、make、./configure 版本最新;可按需定制功能;跨发行版兼容 需安装编译环境;安装步骤繁琐;需手动解决依赖
自包含安装程序 .bin/.sh/install.sh 预编译 + 依赖封装,独立安装包 所有 Linux 发行版(通用) chmod +x执行安装脚本 免编译,自带依赖;安装向导化;跨发行版兼容 安装目录不规范;难以通过系统包管理器管理;卸载繁琐

关键说明

  1. 开源软件通常采用混合发布策略,如 Nginx、MySQL 同时提供 RPM/DEB 二进制包和源代码包
  2. 本章以 openEuler 24.03(RPM 系)为核心,重点讲解 RPM 包和源代码包,DNF 是实操重点
  3. 自包含安装程序仅作为补充,日常管理优先选择系统原生包管理器

3.2 RPM 软件包管理工具

3.2.1 RPM 概述

RPM(Red Hat Package Manager,后更名为 RPM Package Manager):由 Red Hat 于 1997 年首创,是 openEuler、RHEL 等 RPM 系发行版的核心包管理机制。

1. RPM 的核心优势
  1. 全生命周期管理:通过系统级数据库(/var/lib/rpm/)跟踪软件包的安装、升级、卸载,记录文件列表、依赖关系、版本信息
  2. 自动依赖解析:自动计算软件包间的依赖链,提示缺失的依赖包
  3. 标准化命名:所有 RPM 包遵循统一命名规范,通过文件名即可获取软件完整信息
  4. 事务性操作:安装 / 升级 / 卸载作为一个“事务”执行,出错自动回滚,保证系统状态一致性
2. RPM 包的标准化命名规范
软件名-版本号-发布次数.操作系统版本.硬件架构.rpm


实战命令:查看光盘中软件包命名

ls -lh /media/cdrom/Packages/b/bind9*

3.2.2 RPM 命令的全流程实操(核心重点)

1. rpm 命令的基本格式
rpm [核心选项] [子选项] [参数]

表格

核心功能 核心选项
查询 / 验证 -q(查询)、-V(验证)
安装 / 升级 -i(安装)、-U(升级,未安装则直接安装)、-F(更新,未安装则放弃)
卸载 -e(卸载)

执行man rpm可查看完整选项说明。


2. 查询 RPM 软件包信息(最常用功能,重点掌握)

查询分为查询已安装的软件包(核心:rpm -q + 子选项)和查询未安装的 RPM 包文件(核心:rpm -qp + 子选项)两类。所有查询操作均无需依赖网络。

(1)查询已安装的 RPM 软件包

表格

命令组合 功能说明 实战案例
rpm -q 软件名 查询指定软件是否已安装 rpm -q wget
rpm -qa 列出系统中所有已安装的 RPM 软件包 rpm -qa
rpm -qa | grep -i 关键词 模糊查询含指定关键词的软件包(-i 忽略大小写) rpm -qa | grep -i python3
rpm -qi 软件名 查看指定软件的详细信息(版本、发布时间、用途、许可证等) rpm -qi firewalld
rpm -ql 软件名 列出指定软件安装的所有文件和目录 rpm -ql nginx
rpm -qf 文件/目录路径 查看指定文件 / 目录由哪个软件包安装(反向查询) rpm -qf /usr/bin/nginx

核心注意:rpm 命令仅能查询通过 RPM 方式安装的软件,对于源码编译、手动复制的软件无法获取任何信息。

实战案例

# 精准查询两个软件的安装状态
rpm -q elinks lynx
模糊查询python3相关软件(忽略大小写)
rpm -qa | grep -i python3
查看详细信息
rpm -qi python3-firewall
反向查询配置文件所属包
rpm -qf /etc/firewalld/firewalld.conf
(2)查询未安装的 RPM 包文件

参数为 RPM 包的完整文件路径(非软件名),常用子选项与已安装查询一致:

表格

命令组合 功能说明
rpm -qpi 包路径 查详细信息(确认软件功能)
rpm -qpl 包路径 查包内文件(了解安装后会生成的文件路径)

实战案例

# 查详细信息
rpm -qpi /media/cdrom/Packages/e/esc-1.1.2-16.oe2403.x86_64.rpm
查包内文件
rpm -qpl /media/cdrom/Packages/e/esc-1.1.2-16.oe2403.x86_64.rpm

3. 安装、升级、卸载 RPM 软件包(实操重点)

安装 / 升级的参数为RPM 包完整路径,卸载的参数为软件名。若存在依赖缺失,系统会直接报错,需先安装依赖包。

(1)核心选项说明

表格

核心选项 功能 常用组合选项 适用场景
-i 安装新的 RPM 包 -ivh 全新安装,查看安装进度和详细信息
-U 升级指定软件包,未安装则直接安装 -Uvh 软件版本更新,兼容全新安装
-F 更新指定软件包,未安装则放弃 -Fvh 仅对已安装软件进行版本更新
-e 卸载指定软件包 -e 移除已安装的软件,仅需软件名
子选项-h 以 "#" 显示安装 / 升级进度 搭配 - i/-U/-F 直观查看安装过程
子选项-v 显示安装 / 升级的详细信息 搭配 - i/-U/-F 排查安装错误
--force 强制安装 -ivh --force 替换已安装的同版本包 / 安装旧版本包
--nodeps 忽略依赖关系 -ivh --nodeps / -e --nodeps 强制安装 / 卸载,忽略依赖检查

重要警告--force--nodeps为强制操作选项,仅适用于学习 / 调试场景!生产环境中严禁使用,忽略依赖会导致软件功能异常、系统稳定性受损,甚至系统崩溃。

(2)安装 RPM 包
# 核心命令:rpm -ivh 包完整路径
rpm -ivh /media/cdrom/Packages/w/wget-1.21.4-1.oe2403.x86_64.rpm
验证安装成功:查看可执行文件路径
which wget
(3)升级 RPM 包
# 若有新版本,执行以下命令升级,若未安装则直接安装(-U的兼容性)
rpm -Uvh /media/cdrom/Packages/w/wget-新版本.oe2403.x86_64.rpm
(4)卸载 RPM 包
# 卸载命令:rpm -e 软件名
rpm -e wget
验证卸载成功
rpm -q wget      # 提示"未安装软件包wget"
which wget        # 无输出表示卸载成功
(5)处理依赖错误

若安装的软件包依赖其他未安装的包,系统会提示依赖缺失错误,例如:

error: 依赖检测失败:
nginx-filesystem >= 1.24.0-1.oe2403 被 nginx-1.24.0-1.oe2403.x86_64 需要
libnginx-mod-http-core = 1.24.0-1.oe2403 被 nginx-1.24.0-1.oe2403.x86_64 需要

解决方法:根据提示,先安装缺失的依赖包,再安装主包;生产环境中建议使用 DNF 自动解决依赖。


3.3 DNF 软件包管理器(RPM 系新一代工具,核心重点)

3.3.1 DNF 概述与工作机制

DNF(Dandified YUM):YUM 的下一代升级版本,是 openEuler 24.03 的默认包管理器,基于 RPM 包管理机制。解决了传统 YUM 速度慢、依赖解析差、内存占用高等问题。

1. DNF 的核心优势
  1. 自动化依赖解决:新一代依赖解析引擎,自动下载并安装所有缺失的依赖包,无需手动干预
  2. 多仓库支持:可配置多个软件仓库(官方仓库、第三方仓库如 EPEL、openEuler 专属仓库)
  3. 智能镜像源:根据用户地理位置和网络环境自动选择最优的 openEuler 镜像服务器
  4. 模块化管理:支持软件模块(Module),可快速切换软件的不同版本(如 Python 3.9/3.11)
  5. 命令简洁:保持与 YUM 完全兼容的命令格式,YUM 用户可无缝切换
  6. 高效稳定:相比 YUM 占用内存更少、执行速度更快,支持并行下载
  7. 多架构兼容:完美支持 x86_64、aarch64 等主流架构,自动匹配对应架构的软件包
2. DNF 的核心工作机制

DNF 工作基于软件仓库和元数据,核心流程:读取仓库配置 → 下载元数据 → 解析依赖 → 下载并安装软件包

(1)软件仓库(Repository)
  • 软件仓库是 DNF 的软件来源,分为官方仓库(openEuler 24.03 自带,如 base、appstream、extras)和第三方仓库(如 EPEL、Nginx 官方仓库、openEuler 社区仓库)
  • 仓库配置文件存放于/etc/yum.repos.d/,文件后缀为.repo,所有.repo文件都会被 DNF 自动识别
(2)元数据(Metadata)
  • 每个软件仓库提供元数据,包含仓库中所有软件包的名称、版本、依赖关系、文件列表、下载地址等
  • DNF 定期下载并缓存元数据到本地(/var/cache/dnf/),元数据默认有过期时间(如 6 小时),过期后自动更新
(3)仓库配置文件解析(以 openEuler-extras.repo 为例)
[extras]                              # 仓库名,唯一标识
name=openEuler $releasever - Extras  # 仓库描述,$releasever为系统版本(24.03)
mirrorlist=https://mirrors.openeuler.org/mirrorlist?arch=$basearch&repo=extras-$releasever  # 动态镜像列表(优先)
#baseurl=http://dl.openeuler.org/$releasever/extras/$basearch/os/  # 静态镜像地址(备用,注释状态)
gpgcheck=1                            # 开启GPG签名验证,确保软件包来源可信
enabled=1                             # 启用该仓库,0为禁用
metadata_expire=6h                    # 元数据缓存6小时后更新
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-openEuler-24.03  # GPG公钥路径

核心变量$releasever(系统版本,24.03)、$basearch(CPU 架构,x86_64/aarch64),实现配置文件的跨版本 / 跨架构兼容。


3.3.2 DNF 命令全流程实操(与 YUM 兼容,重点掌握)

dnf [选项/子命令] [软件包名] [参数]

DNF 的操作均依赖网络(从仓库下载软件包 / 元数据),若服务器无网络,可配置 openEuler 24.03 本地光盘仓库。

1. 软件包查询(核心:list/info/search)

表格

命令 功能说明 实战案例
dnf list all 列出所有已安装和仓库中可用的软件包 dnf list all
dnf list 软件名 查看指定软件的安装状态和可用版本 dnf list nginx
dnf list available 仅列出仓库中可安装的未安装软件包 dnf list available
dnf list updates 列出系统中可升级的软件包 dnf list updates
dnf info 软件名 查看指定软件包的详细信息(版本、大小、用途、依赖等) dnf info tree
dnf search 关键词 搜索仓库中名称 / 描述含指定关键词的软件包 dnf search web server

实战案例

# 查看nginx的状态(已安装/可安装)
dnf list nginx
查看nginx的详细信息
dnf info nginx
搜索Web服务器相关软件
dnf search web server
模糊查询tree软件
dnf search tree
2. 软件包安装(核心:dnf install)
dnf install [选项] 软件名
  • 选项-y:自动确认所有操作,无需手动输入 y(适用于脚本 / 批量操作)
  • 可同时安装多个软件,用空格分隔软件名

实战案例

# 安装tree工具,自动确认安装(-y)
dnf install -y tree

安装过程输出:Dependencies resolved(依赖解析完成)→ 下载软件包 → Running transaction check/test → Running transaction → Complete!(安装完成)

3. 软件包升级(核心:dnf update)
# 升级指定软件包
dnf update [选项] 软件名
升级系统中所有可升级的软件包(系统更新)
dnf update [选项]
选项-y:自动确认升级

实战案例

# 升级NetworkManager软件包,自动确认
dnf update -y NetworkManager
4. 软件包卸载(核心:dnf remove)
dnf remove [选项] 软件名
  • 选项-y:自动确认卸载
  • 可同时卸载多个软件,用空格分隔
  • DNF 卸载时会自动检查并提示依赖的软件包,避免误卸载导致系统功能异常

实战案例

# 卸载已安装的tree工具,自动确认
dnf remove -y tree

卸载后会自动释放磁盘空间(Freed space)

5. DNF 其他常用命令

表格

命令 功能说明
dnf clean all 清理 DNF 的缓存(元数据 + 下载的软件包),解决缓存损坏问题
dnf makecache 手动生成元数据缓存,提升后续操作速度
dnf repolist 列出当前启用的所有软件仓库
dnf repolist all 列出所有仓库(启用 + 禁用)
dnf module list 软件名 查看软件的模块版本(如 Python、Node.js)
dnf check 检查系统中存在的依赖问题

3.4 从源代码编译安装程序(定制化安装,核心实操)

3.4.1 源代码编译安装概述

源代码包(TarBall):开源软件的原始发布形式,以.tar.gz/.tar.bz2为后缀的压缩包,包含软件的所有原始代码(C/C++/Python 等),需通过编译转换为系统可识别的二进制可执行文件后才能运行。

适用场景
  1. 需要软件的最新版本:二进制包(RPM/DEB)会滞后数周 / 数月,编译安装可快速获取最新功能和安全补丁
  2. 需要定制软件功能:通过配置选项开启 / 关闭特定功能(如 Nginx 开启 SSL、HTTP/2 模块)
  3. 需要适配特殊系统环境:部分二进制包无法适配鲲鹏服务器、云原生环境等特殊场景
  4. 需要修改软件源代码:企业可根据自身需求修改开源软件源代码,添加自定义功能
  5. 适配 openEuler 专属架构:针对鲲鹏(aarch64)等架构,部分软件无官方二进制包,编译安装是最优选择
编译安装的前提:安装开发环境

源代码编译需要编译器和构建工具,核心依赖为gcc(C/C++ 编译器)和make(构建工具),此外不同软件还需要对应的开发库(后缀通常为-devel,表示开发用的头文件和库文件)。

# 安装基础编译工具(openEuler 24.03默认gcc 12.2版本)
dnf install -y gcc make
通用开发库(大部分软件编译都需要)
dnf install -y pcre-devel zlib-devel openssl-devel
鲲鹏架构(aarch64)额外安装架构适配工具
dnf install -y gcc-aarch64-linux-gnu make-aarch64-linux-gnu

3.4.2 源代码编译安装的标准流程(四步核心,通用所有开源软件)

所有开源软件的源代码编译安装都遵循统一标准流程,核心为: 解包 → 配置 → 编译 → 安装 简称:./configure → make → make install

仅部分软件会有细微差异,具体需参考软件包内的 INSTALL 或 README 文档(必看!)。

以下以Nginx 1.26.2(高性能 Web 服务器)为例,完成从源代码下载到服务启动的完整实战。


步骤 1:下载并解包源代码包(Tar 解包)
(1)下载源代码包

优先从软件官方网站下载,保证包的完整性和安全性。

# 下载Nginx 1.26.2源代码包
wget http://nginx.org/download/nginx-1.26.2.tar.gz
(2)解包源代码包

使用tar命令解包,核心选项:

  • -z:解.gz 包
  • -x:解包
  • -v:显示详细信息
  • -f:指定包文件
# 解包Nginx源代码
tar -zxvf nginx-1.26.2.tar.gz
解包完成后,查看生成的目录
ls
输出:nginx-1.26.2  nginx-1.26.2.tar.gz

步骤 2:配置编译参数(./configure,核心定制步骤)

解包后进入源代码目录,执行./configure脚本进行编译配置。这是定制化的核心步骤,通过配置选项指定软件的安装目录、启用 / 禁用功能模块、依赖库路径等。

(1)进入源代码目录
cd nginx-1.26.2
(2)执行./configure 配置,指定核心参数
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module

参数解析

  • --prefix=/usr/local/nginx:指定 Nginx 的安装目录为/usr/local/nginx,所有文件都会安装到该目录,便于管理和卸载
  • --with-http_ssl_module:启用 SSL 模块,支持 HTTPS 协议,需提前安装openssl-devel
  • --with-http_v2_module:启用 HTTP/2 模块,提升 Web 服务的传输速度,需提前安装pcre-develzlib-devel

鲲鹏架构(aarch64)额外配置:若在 openEuler 24.03 鲲鹏服务器上编译,需添加架构指定参数:

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --build=aarch64-unknown-linux-gnu
(3)配置成功的标志

若配置过程中无错误提示,最后会输出 Configuration summary 信息,表示配置成功,生成了Makefile(编译脚本,为下一步 make 做准备):

Configuration summary
  + using system PCRE library
  + using system zlib library
  + using system OpenSSL library
  + nginx path prefix: "/usr/local/nginx"
  + nginx binary file: "/usr/local/nginx/sbin/nginx"
  + nginx configuration prefix: "/usr/local/nginx/conf"
  + nginx error log path: "/usr/local/nginx/logs/error.log"
  + nginx http access log path: "/usr/local/nginx/logs/access.log"
  + nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  + build platform: x86_64-unknown-linux-gnu  # openEuler 24.03 x86架构

配置失败的解决:若配置失败,会提示error: xxx not found,如error: SSL modules require the OpenSSL library,表示缺失openssl-devel,通过dnf install安装对应依赖后重新执行./configure即可。


步骤 3:编译源代码(make,无定制,纯执行)

配置成功后,执行make命令进行编译。make 会根据生成的 Makefile 脚本,调用 gcc 编译器将源代码转换为二进制可执行文件。

# 基础编译,单核心
make
多核并行编译(推荐),指定4个核心,根据服务器CPU调整
make -j 4

编译成功的标志:无 error、warning 可忽略,最后回到命令行提示符,无报错信息。


步骤 4:安装编译后的程序(make install)

编译成功后,执行make install命令,将编译好的二进制文件、配置文件、帮助文档等复制到./configure指定的安装目录(/usr/local/nginx),完成最终的安装。

make install

安装过程输出少量信息,无报错表示安装成功。openEuler 24.03 会自动为安装的程序添加执行权限。


步骤 5:验证安装并启动服务(实战验证)

安装完成后,所有 Nginx 的文件都在/usr/local/nginx目录中:

  • sbin/:可执行文件目录,nginx 为核心启动程序
  • conf/:配置文件目录,nginx.conf 为核心配置文件
  • logs/:日志文件目录,error.log 和 access.log 为核心日志
(1)启动 Nginx 服务
# 进入Nginx的sbin目录,执行nginx启动程序
cd /usr/local/nginx/sbin
./nginx    # 启动Nginx,无输出表示启动成功
(2)验证 Nginx 是否启动

使用ps -ef | grep nginx查看 Nginx 进程,若存在master process(主进程)和worker process(工作进程),表示启动成功:

ps -ef | grep nginx
# 输出示例:
# root    44020  1  0 19:10 ?  00:00:00 nginx: master process ./nginx
# nobody  44021  44020  0 19:10 ?  00:00:00 nginx: worker process
(3)浏览器验证

在客户端浏览器中输入 openEuler 24.03 服务器的 IP 地址(如http://192.168.253.129),若看到 Nginx 的欢迎页面,表示编译安装成功,可正常提供 Web 服务。


源代码编译安装的核心优势与卸载方法
(1)核心优势
  • 定制化:可根据需求开启 / 关闭功能模块,优化软件性能
  • 最新版本:快速获取软件的最新功能和安全补丁
  • 独立目录:所有文件都在指定的安装目录,便于管理和迁移
  • 跨架构兼容:可在 x86_64、aarch64 等架构上编译,适配不同硬件环境
  • 深度优化:可针对 openEuler 的系统内核和硬件架构做编译优化,提升程序运行效率
(2)卸载方法

源代码编译安装的软件无官方卸载命令,由于所有文件都在--prefix指定的安装目录,直接删除该目录即可完成卸载,无残留:

# 卸载Nginx,直接删除安装目录
rm -rf /usr/local/nginx

3.5 三种应用程序管理方式的对比与场景选择

表格

管理方式 核心工具 安装速度 依赖处理 功能定制性 软件版本 管理难度 openEuler 24.03 适配性 适用场景
RPM 原生命令 rpm 快(免编译) 手动处理,需自行安装依赖 无,仅能安装默认功能 标准化,版本较稳定 中,需处理依赖 完美支持,优化了鲲鹏架构依赖解析、提升海量包查询速度 无网络环境的本地安装;单软件快速安装 / 卸载;openEuler 离线服务器部署;跨架构包验证
DNF 包管理器 dnf 快(免编译) 自动解决,无需手动干预 低,仅能安装仓库中预设的功能 openEuler 官方仓库版本,略滞后于最新版 低,命令简洁,自动化程度高 深度优化,支持 x86_64/aarch64 多架构、智能镜像源调度、模块化版本隔离 openEuler 24.03 日常系统管理;标准化服务部署;快速安装 / 升级 / 卸载软件;有网络环境的服务器;云原生环境;企业级标准化部署
源代码编译安装 ./configure/make/make install 慢(需编译) 手动处理,需安装编译依赖和开发库 高,可按需开启 / 关闭功能模块,修改源代码 最新版本,可获取最新功能和安全补丁 高,需掌握编译环境和配置选项 完美支持,提供 gcc 12.2 完善开发工具链,适配 x86_64/aarch64 鲲鹏架构,支持多核并行编译 openEuler 24.03 企业级定制化服务部署;需要软件最新版本;鲲鹏架构专属适配;修改软件源代码定制功能;特殊系统环境适配

核心选择原则

  1. 日常使用 / 标准化部署:优先选择DNF,自动化程度高,管理难度低,是 openEuler 24.03 的默认选择
  2. 无网络 / 离线环境:选择RPM 本地安装,需提前从 openEuler 官方镜像站下载好所有依赖包,适合机房隔离、无外网的服务器部署
  3. 企业级定制化 / 鲲鹏架构适配:选择源代码编译安装,可针对 openEuler 24.03 的内核特性和鲲鹏硬件架构做编译优化,开启专属功能模块,是搭建 Nginx、MySQL、Redis 等企业级定制服务的首选

本章总结

  1. Linux 应用程序与命令的核心区别在于存储目录、安装时机和功能定位,openEuler 24.03 严格遵循 FHS 标准,应用程序文件分散存储在/usr/bin/etc/var/log等指定目录
  2. Linux 软件包分为四大封装类型,RPM 包是 openEuler 24.03 等 RPM 系发行版的标准格式,遵循软件名-版本号-发布次数.oe2403.硬件架构.rpm的标准化命名规范,同时适配 x86_64 和 aarch64 鲲鹏架构
  3. rpm 命令是 RPM 包的原生管理工具,核心功能为查询(-q/-qp)、安装(-i)、升级(-U)、卸载(-e),查询功能是日常系统运维的重点,仅能管理通过 RPM 方式安装的软件
  4. DNF是 openEuler 24.03 的默认包管理器,基于 RPM 机制做了深度优化,默认兼容 YUM 命令,核心优势是自动解决依赖、智能镜像源、多架构兼容、模块化管理,dnf install/remove/update是日常使用的高频命令
  5. openEuler 24.03 提供了完善的开发工具链,支持开源软件从源代码编译安装,标准流程为解包 → 配置 → 编译 → 安装,核心是./configure的定制化配置,--prefix参数可指定安装目录便于后续管理和卸载,同时支持鲲鹏架构的专属编译配置和多核并行编译
  6. openEuler 24.03 三种应用程序管理方式的选择核心是场景 + 架构适配:日常运维选 DNF,无网络离线环境选 RPM,企业级定制化部署、鲲鹏架构适配或需要软件最新版本时选源代码编译安装
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐