Linux包管理完全指南:从yum到dnf的演进与应用
在Linux系统管理和开发工作中,包管理是一项基础但至关重要的技能。无论是安装软件、更新系统、解决依赖关系,还是管理软件仓库,掌握高效的包管理工具都能大幅提升工作效率。本文将全面介绍RHEL系Linux发行版中两款最重要的包管理工具——yum和dnf,从基础概念到高级应用,帮助您精通Linux包管理操作。
1. 包管理的基础概念
1.1 什么是包管理
包管理(Package Management)是指在Linux系统中对软件包进行安装、更新、卸载、查询等操作的过程。一个完整的包管理系统通常包括:
- 包格式:软件的打包格式(如RPM、DEB)
- 包管理器:执行包操作的工具(如yum、dnf、apt)
- 软件仓库:存储和分发软件包的服务器
- 依赖解析:自动处理软件间的依赖关系
1.2 RPM包格式
Red Hat系列Linux发行版(如RHEL、CentOS、Fedora)使用RPM(Red Hat Package Manager)作为基本包格式。RPM包包含:
- 软件的二进制文件、配置文件和文档
- 软件的版本信息和依赖关系
- 安装和卸载脚本
RPM包的文件名通常遵循以下格式:
package-name-version-release.architecture.rpm
例如:nginx-1.24.0-1.el9.x86_64.rpm
1.3 yum与dnf的C/S架构模式
yum和dnf都采用客户端/服务器(C/S)架构模式,其工作原理如下:
- 服务器端(Repository):
- 存放RPM包和相关的元数据库
- 创建yum repository(仓库)时,会在仓库中存储众多RPM包
- 元数据文件存储在特定目录
repodata下,包含包的版本、依赖关系等信息
- 客户端(yum/dnf工具):
- 访问yum服务器进行安装、查询等操作
- 自动下载
repodata中的元数据 - 查询元数据以确定是否存在相关包及依赖关系
- 自动从仓库中找到相关包下载并安装
1.4 yum与dnf的历史演进
- yum(Yellowdog Updater, Modified):
- 2003年发布,基于Python 2开发
- 作为rpm的前端工具,提供自动依赖解析
- 广泛应用于RHEL 5-7、CentOS 5-7
- dnf(Dandified Yum):
- 2015年首次发布,基于Python 3开发
- 作为yum的下一代替代品,解决了yum的性能问题
- 自RHEL 8/CentOS 8起成为默认包管理器
2. yum命令基础
2.1 yum命令语法
yum [选项] [命令] [包名/组名]
2.2 yum常用命令
软件包查询
# 查询可用的软件包
yum list available
# 查询已安装的软件包
yum list installed
# 查询所有软件包(已安装和可用)
yum list all
# 查询特定软件包
yum list nginx
# 查询软件包信息
yum info nginx
# 搜索包含特定关键字的软件包
yum search python3
# 查找哪个软件包提供了特定文件
yum provides /usr/bin/python3
软件包安装
# 安装指定软件包
yum install nginx
# 安装多个软件包
yum install nginx mysql-server php
# 安装本地RPM包(并解决依赖)
yum localinstall package.rpm
# 重新安装软件包
yum reinstall nginx
软件包更新
# 检查可用更新
yum check-update
# 更新所有软件包
yum update
# 更新特定软件包
yum update nginx
# 升级系统到新版本
yum upgrade
软件包卸载
# 卸载软件包
yum remove nginx
# 卸载软件包但保留配置文件
yum erase nginx
2.3 yum仓库管理
# 列出所有启用的仓库
yum repolist enabled
# 列出所有仓库(包括禁用的)
yum repolist all
# 启用仓库
yum-config-manager --enable repo-name
# 禁用仓库
yum-config-manager --disable repo-name
# 安装EPEL扩展仓库
yum install epel-release
2.4 yum配置与仓库管理实践
yum主配置文件
在现代RHEL 9系统中,yum命令实际上是dnf的符号链接,因此yum的主配置文件/etc/yum.conf也是/etc/dnf/dnf.conf的符号链接:
ll /etc/yum.conf
实际输出示例:
lrwxrwxrwx. 1 root root 12 5月 4 2025 /etc/yum.conf -> dnf/dnf.conf
查看配置文件内容:
cat /etc/yum.conf
实际输出示例(带注释说明):
[main]
gpgcheck=1
#安装包前要做包的合法和完整性校验
installonly_limit=3
#同时可以安装3个包,最小值为2,如设为0或1,为不限制
clean_requirements_on_remove=True
#删除包时,是否将不再使用的包删除
best=True
#升级时,自动选择安装最新版,即使缺少包的依赖
skip_if_unavailable=False
#跳过不可用的
[repositoryID]
name=Some name for this repository
#仓库名称
baseurl=url://path/to/repository/
#仓库地址,支持多种协议格式:
# 本地光盘:baseurl=file:///cdrom/AppStream/
# HTTPS镜像:baseurl=https://mirrors.aliyun.com/rockylinux/9.4/AppStream/x86_64/os/
# HTTP镜像:baseurl=http://mirrors.aliyun.com/rockylinux/9.4/AppStream/x86_64/os/
# FTP服务器:baseurl=ftp://10.0.0.159/
# 注意:baseurl指向的路径必须是repodata目录所在的目录
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever
#仓库地址列表,支持使用变量动态生成镜像列表
#常用变量说明:
# $arch - CPU架构:aarch64|i586|i686|x86_64
# $basearch - 系统基本体系结构:i386|x86_64
# $releasever - 系统版本号
#
#带变量的mirrorlist会自动替换为实际值,例如:
# 原始:mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever
# 替换后:mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=x86_64&repo=BaseOS-9
#
#mirrorlist返回的是所有可用镜像地址的列表,
#系统会自动选择最新且距离最近的可用镜像地址
enabled={1|0}
#是否启用,默认值为1,启用
gpgcheck={1|0}
#是否对包进行校验,默认值为1
gpgkey={URL|file://FILENAME}
#校验key的地址
enablegroups={1|0}
#是否启用yum group,默认值为 1
failovermethod={roundrobin|priority}
#有多个baseurl,此项决定访问规则,
#roundrobin 随机,priority:按顺序访问
cost=1000
#开销,或者是成本,
#YUM程序会根据此值来决定优先访问哪个源,默认为1000
metadata_expire=6h
#rocky-9中新增配置,metadata 过期时间
countme=1
#rocky-9中新增配置,默认值false,
#附加在mirrorlist之后,便于仓库收集客户端信息
仓库配置文件
每个软件仓库都有独立的配置文件,存放在/etc/yum.repos.d/目录下:
ll /etc/yum.repos.d/
实际输出示例:
总用量 20
-rw-r--r--. 1 root root 6610 5月 17 11:07 rocky-addons.repo
-rw-r--r--. 1 root root 1165 5月 17 11:07 rocky-devel.repo
-rw-r--r--. 1 root root 2387 5月 17 11:07 rocky-extras.repo
-rw-r--r--. 1 root root 3417 5月 17 11:07 rocky.repo
Rocky Linux国内镜像源
为了提高软件包下载速度,用户可以配置国内的镜像源。以下是几个常用的Rocky Linux国内镜像源:
| 来源机构 | 地址 |
|---|---|
| 阿里云 | https://mirrors.aliyun.com/rockylinux/ |
| 中国科学技术大学 | http://mirrors.ustc.edu.cn/rocky/ |
| 南京大学 | https://mirrors.nju.edu.cn/rocky/ |
| 上海交通大学 | https://mirrors.sjtug.sjtu.edu.cn/rocky/ |
| 东软信息学院 | http://mirrors.neusoft.edu.cn/rocky/ |
实际配置示例:阿里云镜像源
以下是使用阿里云镜像源的完整配置示例:
- 创建阿里云BaseOS仓库配置文件:
sudo vim /etc/yum.repos.d/aliyun-baseos.repo
- 添加以下配置内容:
[aliyun-baseos]
name=aliyun.baseos
baseurl=https://mirrors.aliyun.com/rockylinux/9.6/BaseOS/x86_64/os/
gpgcheck=0
- 生成元数据缓存:
yum makecache
实际输出示例:
aliyun.baseos 5.0 MB/s | 2.5 MB 00:00
Rocky Linux 9 - BaseOS 2.2 kB/s | 4.1 kB 00:01
Rocky Linux 9 - AppStream 1.8 kB/s | 4.5 kB 00:02
Rocky Linux 9 - Extras 1.9 kB/s | 2.9 kB 00:01
元数据缓存已建立。
- 验证仓库配置:
yum repolist
实际输出示例:
仓库 id 仓库名称
aliyun-baseos aliyun.baseos
appstream Rocky Linux 9 - AppStream
baseos Rocky Linux 9 - BaseOS
- 查看详细仓库信息:
yum repolist -v --repoid=aliyun-baseos
实际输出示例:
加载插件:builddep, changelog, config-manager, copr, debug, debuginfo-install, download, generate_completion_cache, groups-manager, kpatch, needs-restarting, notify-packagekit, playground, repoclosure, repodiff, repograph, repomanage, reposync, system-upgrade
YUM version: 4.14.0
cachedir: /var/tmp/dnf-soveran-akvddr2r
上次元数据过期检查:0:01:00 前,执行于 2025年11月13日 星期四 22时22分53秒。
仓库ID : aliyun-baseos
仓库名称 : aliyun.baseos
软件仓库修订版 : 1762376584
更新的软件仓库 : 2025年11月06日 星期四 05时03分04秒
软件仓库的软件包 : 1,171
软件仓库的可用软件包: 1,171
软件仓库大小 : 1.5 G
软件仓库基本 URL : https://mirrors.aliyun.com/rockylinux/9.6/BaseOS/x86_64/os/
软件仓库过期时间 : 172,800 秒 (最近 2025年11月13日 星期四 22时22分53秒)
仓库文件名 : /etc/yum.repos.d/aliyun-baseos.repo
软件包总数:1,171
实际配置示例:南京大学镜像源
以下是使用南京大学镜像源的完整配置示例,包含AppStream、BaseOS和extras三个仓库:
- 创建南京大学镜像源配置文件:
sudo vim /etc/yum.repos.d/nju-extras.repo
- 添加以下配置内容:
[nju-appstream]
name=nju AppStream
baseurl=https://mirrors.nju.edu.cn/rocky/9.6/AppStream/x86_64/os/
gpgcheck=0
[nju-baseos]
name=nju BaseOS
baseurl=https://mirrors.nju.edu.cn/rocky/9.6/BaseOS/x86_64/os/
gpgcheck=0
[nju-extras]
name=nju extras
baseurl=https://mirrors.nju.edu.cn/rocky/9.6/extras/x86_64/os/
gpgcheck=0
- 生成元数据缓存:
yum makecache
实际输出示例:
aliyun.baseos 22 kB/s | 4.1 kB 00:00
nju AppStream 23 MB/s | 9.5 MB 00:00
nju BaseOS 7.6 MB/s | 2.5 MB 00:00
nju extras 85 kB/s | 17 kB 00:00
Rocky Linux 9 - BaseOS 1.7 kB/s | 4.1 kB 00:02
Rocky Linux 9 - AppStream 4.1 kB/s | 4.5 kB 00:01
Rocky Linux 9 - Extras 3.1 kB/s | 2.9 kB 00:00
元数据缓存已建立。
实际配置示例:本地光盘源
在没有网络连接或需要使用特定版本软件时,可以使用本地光盘作为软件源。以下是在Rocky Linux 9中配置本地光盘源的完整示例:
- 挂载光盘到/mnt目录
mount /dev/cdrom /mnt/实际输出示例:
mount: /mnt: WARNING: source write-protected, mounted read-only. - 验证光盘内容
df -h实际输出示例:
文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 1.8G 0 1.8G 0% /dev/shm tmpfs 725M 16M 710M 3% /run /dev/mapper/rl-root 70G 6.9G 64G 10% / /dev/sda1 960M 562M 399M 59% /boot /dev/mapper/rl-home 126G 1.1G 124G 1% /home tmpfs 363M 52K 363M 1% /run/user/42 tmpfs 363M 36K 363M 1% /run/user/1000 /dev/sr0 12G 12G 0 100% /mntls /mnt/实际输出示例:
AppStream BaseOS EFI images isolinux LICENSE media.repo - 创建本地光盘源配置文件
sudo vim /etc/yum.repos.d/cdrom.repo - 添加以下配置内容
[cdrom-appstream] name=cdrom appstream baseurl=file:///mnt/AppStream/ gpgcheck=0 [cdrom-baseos] name=cdrom baseos baseurl=file:///mnt/BaseOS/ gpgcheck=0 - 生成元数据缓存
yum makecache - 验证光盘源配置
yum repolist
BaseOS和AppStream目录说明:
- BaseOS目录
- 内容:存储着操作系统的核心组件和基本系统工具,如内核、shell工具、系统服务等。
- 功能:提供操作系统的基本功能和支持,确保系统的正常运行。
- AppStream目录
- 内容:存储着用户可能需要的应用程序和软件包的元数据信息,以及软件包依赖关系等。
- 功能:使用户可以方便地安装和管理这些软件,通常包含用户界面软件、开发工具、数据库工具等应用程序。
- 关联关系:
- BaseOS和AppStream两个目录之间的关系是互补的。
- 在安装和管理软件时,系统会从这两个目录中获取所需的软件包和依赖关系,以确保系统的完整性和稳定性。
使用yum makecache命令可以预先生成软件仓库的元数据缓存,提高后续操作的速度。这在配置新仓库后特别有用,可以立即验证仓库的可用性。
详细查看仓库信息
使用yum repolist -v命令可以查看详细的仓库信息,包括仓库ID、名称、大小、镜像地址等。如果需要查看特定仓库的详细信息,可以使用yum repolist -v --repoid=仓库ID命令。
通过这些命令,用户可以全面了解当前系统中配置的所有仓库,以及每个仓库的具体状态和配置详情。
3. dnf命令基础
3.1 dnf命令语法
dnf [选项] [命令] [包名/组名]
3.2 dnf常用命令
软件包查询
# 查询可用的软件包
dnf list available
# 查询已安装的软件包
dnf list installed
# 查询所有软件包(已安装和可用)
dnf list all
# 查询特定软件包
dnf list nginx
# 查询软件包信息
dnf info nginx
# 搜索包含特定关键字的软件包
dnf search python3
# 查找哪个软件包提供了特定文件
dnf provides /usr/bin/python3
软件包安装
# 安装指定软件包
dnf install nginx
# 安装多个软件包
dnf install nginx mysql-server php
# 安装本地RPM包(并解决依赖)
dnf install package.rpm
# 重新安装软件包
dnf reinstall nginx
软件包更新
# 检查可用更新
dnf check-update
# 更新所有软件包
dnf update
# 更新特定软件包
dnf update nginx
# 升级系统到新版本
dnf upgrade
软件包卸载
# 卸载软件包
dnf remove nginx
# 卸载软件包但保留配置文件
dnf erase nginx
3.3 dnf仓库管理
# 列出所有启用的仓库
dnf repolist enabled
# 列出所有仓库(包括禁用的)
dnf repolist all
# 启用仓库
dnf config-manager --enable repo-name
# 禁用仓库
dnf config-manager --disable repo-name
# 安装EPEL扩展仓库
dnf install epel-release
4. yum与dnf的对比
| 特性 | yum | dnf |
|---|---|---|
| 开发语言 | Python 2 | Python 3 |
| 性能 | 较慢,尤其是处理大量包时 | 更快,使用libsolv解决依赖 |
| 内存占用 | 较高 | 较低 |
| 命令兼容性 | - | 兼容大部分yum命令 |
| 错误处理 | 较简单 | 更完善的错误报告 |
| 依赖解析 | 基于算法,有时不准确 | 基于libsolv,更准确 |
| 事务支持 | 有限 | 完整的事务支持 |
| 配置文件位置 | /etc/yum.conf, /etc/yum.repos.d/ | /etc/dnf/dnf.conf, /etc/yum.repos.d/ |
| 默认发行版 | RHEL 5-7, CentOS 5-7 | RHEL 8+, CentOS 8+, Fedora 22+ |
4.1 现代系统中的实际关系
在现代RHEL系系统中,yum实际上是dnf的别名,两者最终都指向同一个二进制文件。以下是在Rocky Linux 9.6系统中的实际输出:
# 验证nginx包的完整性
rpm -V nginx
0 ✓ 19:56:21 soveran@rocky9.6-12,10.0.0.12:/tmp/softs $
# 查看yum命令的实际指向
ll /usr/bin/yum
lrwxrwxrwx. 1 root root 5 5月 4 2025 /usr/bin/yum -> dnf-3
0 ✓ 20:04:34 soveran@rocky9.6-12,10.0.0.12:/tmp/softs $
# 查看dnf命令的实际指向
ll /usr/bin/dnf
lrwxrwxrwx. 1 root root 5 5月 4 2025 /usr/bin/dnf -> dnf-3
0 ✓ 20:04:42 soveran@rocky9.6-12,10.0.0.12:/tmp/softs $
这个输出表明:
rpm -V nginx验证了nginx包的完整性(无输出表示验证通过)yum和dnf都是指向dnf-3二进制文件的符号链接- 在现代系统中,无论使用
yum还是dnf命令,实际上执行的都是相同的程序
5. 高级用法
5.1 软件组管理
# 列出所有软件组
dnf grouplist
# 查看软件组详细信息
dnf groupinfo "Development Tools"
# 安装软件组
dnf groupinstall "Development Tools"
# 更新软件组
dnf groupupdate "Development Tools"
# 移除软件组
dnf groupremove "Development Tools"
5.2 缓存管理
# 查看缓存信息
dnf clean all
# 清除元数据缓存
dnf clean metadata
# 清除软件包缓存
dnf clean packages
# 构建缓存
dnf makecache
5.3 事务管理
# 查看事务历史
dnf history
# 查看特定事务的详细信息
dnf history info 1
# 撤销特定事务
dnf history undo 1
# 重做特定事务
dnf history redo 1
5.4 安全更新
# 列出安全更新
dnf updateinfo list security
# 安装所有安全更新
dnf update --security
# 安装特定类型的安全更新
dnf update --sec-severity=Critical
6. 配置文件详解
6.1 主配置文件
dnf主配置文件: /etc/dnf/dnf.conf
[main]
cachedir=/var/cache/dnf
keepcache=0
debuglevel=2
logfile=/var/log/dnf.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=3
autoremove_keep_current=10
best=1
主要配置项说明:
cachedir:缓存目录位置keepcache:是否保留下载的包(0=不保留,1=保留)gpgcheck:是否检查GPG签名(0=不检查,1=检查)plugins:是否启用插件(0=禁用,1=启用)installonly_limit:保留多少个内核版本best:是否总是尝试安装最新版本
6.2 仓库配置文件
仓库配置文件位于 /etc/yum.repos.d/ 目录下,通常以 .repo 为扩展名。
示例:EPEL仓库配置
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=https://download.fedoraproject.org/pub/epel/$releasever/Everything/$basearch/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
主要配置项说明:
name:仓库名称baseurl:仓库的基础URLmetalink:仓库的元数据链接(用于自动选择最快的镜像)enabled:是否启用该仓库(0=禁用,1=启用)gpgcheck:是否检查GPG签名gpgkey:GPG密钥文件路径
7. 实用案例
7.1 案例:搭建Web服务器
# 安装Web服务器组件
dnf install nginx php php-fpm php-mysqlnd mysql-server
# 启动并启用服务
systemctl start nginx php-fpm mysqld
systemctl enable nginx php-fpm mysqld
# 查看服务状态
systemctl status nginx php-fpm mysqld
7.2 案例:安装开发环境
# 安装开发工具组
dnf groupinstall "Development Tools"
# 安装额外的开发库
dnf install gcc-c++ make cmake git
# 安装Python开发环境
dnf install python3 python3-devel python3-pip
7.3 案例:从旧版本迁移到dnf
# 在CentOS 7上安装dnfyum install dnf
# 比较yum和dnf的性能
time yum list available > /dev/null
time dnf list available > /dev/null
7.4 案例:解决依赖冲突
# 查看依赖问题
dnf repoquery --requires --resolve nginx
# 使用--allowerasing选项解决冲突
dnf install new-package --allowerasing
# 使用--skip-broken选项跳过损坏的依赖
dnf update --skip-broken
8. 最佳实践
8.1 安全最佳实践
# 定期检查安全更新
dnf updateinfo list security
# 只安装安全更新
dnf update --security
# 启用GPG检查(默认已启用)
gpgcheck=1
# 使用官方仓库和受信任的第三方仓库
8.2 性能优化
# 清理缓存以节省磁盘空间
dnf clean all
# 启用 fastestmirror 插件(自动选择最快的镜像)
# 在 /etc/dnf/dnf.conf 中添加:
plugins=1
fastestmirror=1
# 增加并行下载数量
deltarpm=1
max_parallel_downloads=10
8.3 维护最佳实践
# 定期更新系统
dnf update
# 移除不再需要的软件包
dnf autoremove
# 检查系统中可能存在的问题
dnf check
# 备份重要的配置文件
tar -czvf dnf-config-backup.tar.gz /etc/dnf/ /etc/yum.repos.d/
9. 常见问题与解决方案
9.1 仓库连接失败
问题: Failed to download metadata for repo 'epel': Cannot prepare internal mirrorlist
解决方案:
# 检查网络连接
ping download.fedoraproject.org
# 清理缓存并重新构建
dnf clean all
dnf makecache
# 检查仓库配置
dnf config-manager --dump epel
9.2 依赖冲突
问题: Error: package1 conflicts with package2
解决方案:
# 使用--allowerasing选项
dnf install package --allowerasing
# 手动移除冲突的包
dnf remove conflicting-package
dnf install package
9.3 GPG签名检查失败
问题: GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8"
解决方案:
# 安装缺失的GPG密钥
dnf install fedora-repos-archive
# 手动导入GPG密钥
rpm --import https://download.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8
10. 总结与未来趋势
10.1 主要知识点回顾
- yum和dnf的关系:dnf是yum的下一代替代品,提供更好的性能和功能
- 核心功能:软件包的安装、更新、卸载、查询和依赖管理
- 仓库管理:配置和管理软件仓库,扩展可用软件源
- 高级特性:软件组、缓存管理、事务历史、安全更新
- 最佳实践:安全、性能和维护方面的推荐做法
10.2 未来发展趋势
- 模块化包管理:Fedora已开始采用模块化包管理,允许安装同一软件的多个版本
- 容器化软件分发:Docker和Podman等容器技术正在改变软件分发方式
- 扁平化包管理:减少依赖层级,提高系统稳定性
- 人工智能辅助:使用AI优化依赖解析和包选择过程
通过掌握yum和dnf这两款强大的包管理工具,您可以高效地管理Linux系统中的软件,确保系统安全、稳定地运行。无论是系统管理员还是开发人员,熟练使用包管理工具都是Linux技能体系中不可或缺的一部分。
11. 趣味命令与小技巧
除了常规的系统管理功能,Linux还提供了一些有趣的命令,可以为您的工作增添一些乐趣。以下是一些通过yum/dnf安装和使用的趣味命令示例:
11.1 火车命令 (sl) 和 奶牛说命令 (cowsay)
在Rocky Linux 9中,cowsay和sl这两个包默认不在官方的基础仓库中,需要启用EPEL(Extra Packages for Enterprise Linux)仓库才能安装。
解决步骤:
- 安装EPEL仓库 EPEL提供了许多企业版Linux额外的常用软件包,执行以下命令安装:
sudo dnf install epel-release -y(Rocky Linux推荐使用
dnf替代yum,两者功能类似,dnf是更新的包管理器) - 更新仓库缓存
sudo dnf makecache - 安装cowsay和sl
sudo dnf install cowsay sl -y - 验证安装
- 运行
cowsay "Hello World"测试cowsay - 运行
sl测试小火车动画
- 运行
11.2 扩展:更多趣味命令
安装fortune和animalsay
# 需要先安装EPEL仓库
sudo dnf install fortune-mod cowsay-animals -y
使用示例:
# 基本使用
cowsay "Hello Linux!"
# 管道使用
fortune | cowsay
# 使用不同的动物
animalsay cat "Meow!"
# 查看可用的动物
ls /usr/share/cowsay/cows/
这些趣味命令虽然没有实际的系统管理功能,但它们展示了Linux系统的灵活性和社区的创造力,也可以在学习和工作中带来一些轻松的时刻。EPEL仓库还包含很多其他实用工具,后续安装其他软件时也可能会用到。
文档信息
- 本文作者:soveran zhong
- 本文链接:https://blog.clockwingsoar.cyou/2025/11/13/linux-package-management-yum-dnf/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)