教程 rockylinux tutorial

使用 dnf 管理软件包

在 Rocky Linux 中,软件包管理是系统管理的重要组成部分。本文将详细介绍如何使用 dnf(Dandified YUM)包管理器来管理系统中的软件包,包括安装、更新、删除软件包以及管理软件仓库等操作。

什么是 dnf?

dnf 是 Rocky Linux(以及其他 RHEL 系列发行版)中默认的包管理器,它是 yum(Yellowdog Updater Modified)的继任者。dnf 提供了更快的性能、更好的依赖解析能力和更多的功能,同时保持了与 yum 兼容的命令行接口。

dnf 的基本操作

1. 安装软件包

bash
# 安装单个软件包
sudo dnf install package_name

# 安装多个软件包
sudo dnf install package1 package2 package3

# 安装特定版本的软件包
sudo dnf install package_name-version

# 自动回答 yes
sudo dnf install -y package_name

2. 更新软件包

bash
# 更新单个软件包
sudo dnf update package_name

# 更新所有软件包
sudo dnf update

# 检查可更新的软件包(不执行更新)
dnf check-update

3. 删除软件包

bash
# 删除软件包,但保留配置文件
sudo dnf remove package_name

# 删除软件包及其依赖(谨慎使用)
sudo dnf autoremove package_name

# 删除软件包及其配置文件
sudo dnf erase package_name  # 与 remove 效果相同

4. 搜索软件包

bash
# 搜索软件包
dnf search keyword

# 搜索提供特定功能的软件包
dnf provides feature_name

# 搜索文件属于哪个软件包
dnf provides /path/to/file

5. 查看软件包信息

bash
# 查看软件包详情
dnf info package_name

# 列出已安装的所有软件包
dnf list installed

# 列出所有可用的软件包
dnf list available

# 列出所有软件包(已安装和可用)
dnf list all

6. 管理软件包组

bash
# 列出所有软件包组
dnf group list

# 安装软件包组
sudo dnf group install "Group Name"

# 移除软件包组
sudo dnf group remove "Group Name"

# 查看软件包组详情
dnf group info "Group Name"

软件仓库管理

1. 查看已启用的仓库

bash
# 列出所有已启用的仓库
dnf repolist

# 列出所有仓库(包括禁用的)
dnf repolist all

2. 启用和禁用仓库

bash
# 启用仓库
sudo dnf config-manager --set-enabled repository_name

# 禁用仓库
sudo dnf config-manager --set-disabled repository_name

3. 添加新仓库

bash
# 添加仓库(通过 URL)
sudo dnf config-manager --add-repo repository_url

# 添加 EPEL 仓库示例
sudo dnf install epel-release -y

4. 清理缓存

bash
# 清理所有缓存
sudo dnf clean all

# 重建缓存
sudo dnf makecache

dnf 的高级功能

1. 软件包历史

bash
# 查看软件包事务历史
dnf history

# 查看特定事务的详细信息
dnf history info transaction_id

# 撤销特定事务
sudo dnf history undo transaction_id

# 重做特定事务
sudo dnf history redo transaction_id

2. 模块管理(在 Rocky Linux 8+ 中)

bash
# 列出所有可用模块
dnf module list

# 查看模块详情
dnf module info module_name

# 启用模块
sudo dnf module enable module_name:stream

# 安装模块
sudo dnf module install module_name:stream/profile

# 禁用模块
sudo dnf module disable module_name

3. 依赖关系管理

bash
# 查看软件包的依赖
dnf repoquery --requires package_name

# 查看哪些软件包依赖于特定软件包
dnf repoquery --whatrequires package_name

# 查看软件包提供的功能
dnf repoquery --provides package_name

4. 下载软件包而不安装

bash
# 下载软件包到当前目录
sudo dnf download package_name

# 下载软件包及其依赖
sudo dnf download --resolve package_name

常见的软件仓库

在 Rocky Linux 中,以下是一些常用的软件仓库:

官方仓库

  • BaseOS:提供核心操作系统组件
  • AppStream:提供应用程序流、运行时和数据库等
  • PowerTools:提供构建依赖项和开发工具

第三方仓库

  • EPEL (Extra Packages for Enterprise Linux):提供额外的企业级软件包
  • RPM Fusion:提供开源和非开源软件
  • ELRepo:提供硬件相关的软件包,如内核驱动程序

配置 dnf

dnf 配置文件

主要配置文件位于 /etc/dnf/dnf.conf,您可以根据需要修改此文件:

bash
sudo vim /etc/dnf/dnf.conf

常用配置选项:

ini
[main]
cachedir=/var/cache/dnf
keepcache=1  # 保留缓存,设为 0 则自动清除
debuglevel=2
logfile=/var/log/dnf.log
exactarch=1
obsoletes=1
gpgcheck=1  # 检查 GPG 签名
enabled=1
installonly_limit=3  # 保留的内核版本数量
best=True
skip_if_unavailable=False
deltarpm=0  # 如果带宽有限,可以启用增量 RPM
timeout=300  # 超时时间(秒)
metadata_expire=6h  # 元数据过期时间
defaultyes=True  # 默认回答 yes

仓库配置文件

每个仓库都有自己的配置文件,位于 /etc/yum.repos.d/ 目录:

bash
ls -l /etc/yum.repos.d/

dnf 插件

dnf 支持插件扩展功能,常用的插件包括:

安装插件

bash
# 安装 dnf 插件
sudo dnf install dnf-plugins-core -y

常用插件

  • fastestmirror:自动选择最快的镜像
  • changelog:显示软件包更新日志
  • download:下载软件包而不安装
  • needs-restarting:检查哪些服务需要重启

使用插件示例

bash
# 检查需要重启的服务
sudo needs-restarting -r

# 查看软件包更新日志
dnf changelog package_name

实用的 dnf 命令组合

1. 系统维护命令

bash
# 全面更新系统
sudo dnf update -y

# 删除不需要的依赖
sudo dnf autoremove

# 清理缓存
sudo dnf clean all

# 重建缓存
sudo dnf makecache

2. 查找和安装特定功能的软件包

bash
# 查找并安装 Web 服务器
dnf search web server
sudo dnf install httpd -y

# 查找并安装开发工具
dnf group list | grep Development
sudo dnf group install "Development Tools" -y

3. 解决依赖问题

bash
# 检查冲突
sudo dnf check

# 强制安装特定版本
sudo dnf install package_name-version --allowerasing

常见问题与解决方案

1. 无法找到软件包

  • 问题:No match for argument: package_name
  • 解决方案:
    • 检查软件包名称是否正确
    • 启用包含该软件包的仓库
    • 运行 sudo dnf makecache 刷新缓存

2. 依赖冲突

  • 问题:Error: Transaction check error
  • 解决方案:
    • 使用 --allowerasing 选项允许替换冲突的软件包
    • 尝试安装特定版本的软件包
    • 检查是否有第三方仓库导致冲突

3. GPG 签名验证失败

  • 问题:GPG key retrieval failed 或 Public key for package.rpm is not installed
  • 解决方案:
    • 导入缺失的 GPG 密钥
    • 临时禁用 GPG 检查(不推荐,仅作为临时解决方案):sudo dnf install package_name --nogpgcheck

4. 网络问题

  • 问题:无法连接到仓库
  • 解决方案:
    • 检查网络连接
    • 尝试使用不同的镜像
    • 修改 timeout 设置

总结

dnf 是 Rocky Linux 中强大而灵活的包管理工具,通过本文介绍的命令和技巧,您应该能够有效地管理系统中的软件包。从基本的安装、更新和删除操作,到更高级的仓库管理和依赖解析,dnf 提供了全面的功能来满足您的软件管理需求。

定期使用 dnf 来更新您的系统,安装必要的软件包,以及管理您的软件仓库,这将帮助您保持系统的安全性和功能性。