第9章:软件包管理(DNF 与 RPM)

在 Linux 系统运维中,安装、更新和管理软件是日常核心任务。openEuler 采用基于 RPM 的包管理系统,使用 DNF 作为默认的高级包管理器。本章将带你全面掌握如何在 openEuler 中高效、安全地管理软件。

🌟 本章目标

  • 理解 RPM 与 DNF 的关系:底层包格式 vs 高层管理工具
  • 掌握 dnf 常用命令:安装、更新、删除、查询软件
  • 学会配置国内镜像源(华为云、阿里云)提升下载速度
  • 使用 rpm 命令手动管理 RPM 包(查询、安装、卸载)
  • 解决依赖问题,理解仓库(Repository)机制
  • 实战:安装常用工具(如 nginx、htop、vim-enhanced)

9.1 RPM 与 DNF 简介

🔹 RPM(Red Hat Package Manager)

  • 是一种 软件包文件格式.rpm 文件)
  • 包含程序文件、配置、元数据和安装脚本
  • 优点:标准化、可验证、易于分发
  • 缺点:不自动解决依赖关系

示例包名:nginx-1.21.5-9.oe2203sp4.x86_64.rpm

🔹 DNF(Dandified YUM)

  • RPM 的高级前端管理器,取代了旧版 YUM
  • 自动解决依赖、从仓库下载、智能更新
  • 支持插件扩展,性能更好

💬 类比:

  • RPM = 手动拧螺丝组装电脑
  • DNF = 一键装机工具

📌 openEuler 默认使用 DNF 进行软件管理。


9.2 DNF 基本命令

✅ 1. 刷新缓存(首次使用或换源后)

bash 复制代码
sudo dnf makecache

建议每次配置新源后运行。


✅ 2. 安装软件

bash 复制代码
sudo dnf install vim

系统会显示将安装的包及其依赖,提示确认:

复制代码
Proceed? [y/N]: y
安装多个软件
bash 复制代码
sudo dnf install nginx htop git
不提示直接安装(适合脚本)
bash 复制代码
sudo dnf install -y nginx

✅ 3. 更新软件

bash 复制代码
# 更新指定软件
sudo dnf update nginx

# 更新所有可更新的软件
sudo dnf update -y

💡 建议定期执行 dnf update 以修复安全漏洞。


✅ 4. 删除软件

bash 复制代码
sudo dnf remove nginx

会自动移除不再需要的依赖(如果无其他程序依赖)。

彻底清理(可选)
bash 复制代码
sudo dnf autoremove

删除所有"孤儿依赖"(即没有被任何包依赖的包)。


✅ 5. 查看软件信息

bash 复制代码
dnf info vim

输出包括版本、大小、描述、依赖等。


9.3 软件包查询与搜索

🔍 搜索软件包

bash 复制代码
dnf search keyword

例如:

bash 复制代码
dnf search editor    # 查找编辑器相关软件
dnf search mysql     # 查找数据库相关

📦 查询已安装的软件

bash 复制代码
dnf list installed | grep nginx

查看所有已安装包:

bash 复制代码
dnf list installed

🔎 查询某个文件属于哪个包

bash 复制代码
dnf provides /usr/bin/htop

输出:

复制代码
htop-3.1.2-2.oe2203sp3.x86_64 : htop - an interactive process viewer
Repo        : openEuler-everything
Matched from:
Filename    : /usr/bin/htop

💡 这在你看到一个命令但不知道如何安装时非常有用!


🧩 查看软件依赖关系

bash 复制代码
dnf deplist nginx

显示 nginx 依赖的所有库和包。


9.4 配置国内软件源(推荐)

openEuler 官方源在国外,访问较慢。建议切换为国内镜像。

推荐镜像源

步骤:更换为华为云镜像

bash 复制代码
# 1. 备份原 repo 文件
sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.bak

# 2. 删除旧 repo
sudo rm -f /etc/yum.repos.d/*.repo

# 3. 配置华为云镜像源
https://mirrors.huaweicloud.com/mirrorDetail/5ebe3408c8ac54047fe607f0?mirrorName=openeuler&catalog=os

🔗 其他版本替换链接中的版本号和架构(如 aarch64)

验证源配置

bash 复制代码
dnf repolist

应显示:

复制代码
repo id                                                repo name
openEuler-EPOL                                         openEuler-EPOL
openEuler-OS                                           openEuler-OS
openEuler-everything                                   openEuler-everything

刷新缓存

bash 复制代码
sudo dnf clean all
sudo dnf makecache

✅ 配置完成,安装速度将大幅提升!


9.5 使用 rpm 命令(底层操作)

虽然推荐使用 dnf,但有时需要直接操作 .rpm 文件。

📦 安装 RPM 包(不推荐,可能缺依赖)

bash 复制代码
sudo rpm -ivh package.rpm
  • -i:install
  • -v:verbose(显示详情)
  • -h:显示安装进度(# 号)

⚠️ 风险:不自动解决依赖,容易失败。


🗑️ 卸载 RPM 包

bash 复制代码
sudo rpm -e package_name

注意:是包名,不是 .rpm 文件名。


🔍 查询已安装的 RPM 包

bash 复制代码
rpm -qa | grep nginx
  • -q:query
  • -a:all

📁 查询某个 RPM 包安装了哪些文件

bash 复制代码
rpm -ql nginx

输出所有安装路径,如:

复制代码
/etc/nginx/nginx.conf
/usr/sbin/nginx
/usr/share/nginx/html/index.html

🔎 查询某个文件是由哪个 RPM 包安装的

bash 复制代码
rpm -qf /usr/sbin/nginx

输出:nginx-1.21.5-9.oe2203sp3.x86_64


9.6 实战:安装常用软件

案例1:安装 Web 服务器 Nginx

bash 复制代码
# 安装
sudo dnf install -y nginx

# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

# 查看状态
sudo systemctl status nginx

# 测试访问(本地)
curl http://localhost

浏览器访问虚拟机 IP,应看到 openEuler 欢迎页。


案例2:安装系统监控工具 htop

bash 复制代码
sudo dnf install -y htop
htop

htoptop 更直观,支持鼠标操作。


案例3:安装增强版 Vim

bash 复制代码
sudo dnf install -y vim-enhanced

vim-enhanced 支持语法高亮、自动缩进等高级功能。


✅ 本章小结

工具 用途 推荐命令
DNF 主要包管理器 install, update, remove, search
RPM 底层包操作 rpm -qa, rpm -ql, rpm -qf
镜像源 提升速度 华为云 / 阿里云 repo 配置
依赖管理 自动解决 DNF 自动处理,无需手动干预

📝 课后练习

  1. 配置华为云镜像源,并运行 dnf makecache
  2. 搜索并安装 tree 命令(用于树状显示目录结构)。
  3. 使用 dnf provides 找出 ifconfig 命令属于哪个包(答案:net-tools)。
  4. 安装 net-tools 后,运行 ifconfig 查看网络接口。
  5. 使用 rpm -ql 查看 nginx 安装了哪些文件。
  6. (挑战)下载一个 .rpm 包(如从 https://rpmfind.net),尝试用 rpm -ivh 安装,观察是否报依赖错误,再用 dnf install 安装同一功能的软件,对比体验。

🔜 下一章预告:第10章《进程管理与系统监控》

我们将学习:

  • 什么是进程?PID、PPID 的含义
  • 使用 pstophtop 查看进程
  • 控制进程:killpkillkillall
  • 系统资源监控:freedfvmstatiostat
  • 进程优先级与 nice/renice

准备好成为系统的"任务管理器"专家了吗?

相关推荐
@syh.1 小时前
【linux】进程间通信
linux
wdfk_prog1 小时前
EWMA、加权平均与一次低通滤波的对比与选型
linux·笔记·学习·游戏·ssh
Mr.小海1 小时前
Docker Compose 实战:多容器应用编排从入门到生产落地
运维·docker·容器
longxibo2 小时前
【Ubuntu datasophon1.2.1 二开之六:解决CLICKHOUSE安装问题】
大数据·linux·clickhouse·ubuntu
何中应2 小时前
Jenkins如何注册为CentOS7的一个服务
linux·运维·jenkins·开发工具
Mr.小海2 小时前
Docker 镜像分层机制:从原理到生产环境的深度实践
运维·docker·容器
yttandb2 小时前
linux的基础命令
linux·运维·服务器
进击的雷神2 小时前
Cursor 浏览器自动化:Playwright MCP Server 使用指南
运维·自动化·cursor·playwright mcp
未来之窗软件服务2 小时前
服务器运维(三十五)数字证书TLS 版本设备对照表—东方仙盟
运维·服务器·服务器运维·仙盟创梦ide·东方仙盟