yum 变成了 dnf
- dnf
- 现在的包管理器。依赖解析更快更准,是 yum 的第四代重写版。
- yum
- 在 RHEL 8+ 上只是指向 dnf 的软链接——敲
yum install实际执行的还是 dnf。老命令还能用,但正式场合说 dnf。 - rpm
- 更底层的工具,直接操作单个
.rpm包文件。它不解决依赖——缺什么就报错让你自己找。dnf 是在 rpm 之上加了依赖解析和仓库管理。
日常命令
$ sudo dnf install -y vim wget curl tree net-tools
$ sudo dnf remove -y tree
$ dnf search nginx # 搜包名
$ dnf info nginx # 看详细信息
$ dnf list installed | wc -l # 装了多少个包
$ dnf repolist # 当前启用了哪些仓库
$ sudo dnf check-update # 只看有哪些能更新,不动手
$ sudo dnf update nginx # 只更新指定的包
$ sudo dnf update -y # 全量更新 ← 生产环境慎用
全量更新可能把内核、glibc 这类核心组件也升级了,重启后出问题就很麻烦。
正确做法:只更新有安全漏洞的特定包(dnf update-minimal --security),或者先在测试机验证。面试时说出"我不会在生产上直接 dnf update -y",比说会用这条命令加分。
两个查询技巧
$ dnf provides ss
iproute-6.2.0-5.el9.aarch64 : Advanced IP routing utilities
↑ 想装 ss 但不知道包名?用 provides 反查
$ dnf provides */semanage # Day 19 那个命令属于哪个包
$ rpm -qf /etc/nginx/nginx.conf
nginx-1.20.1-14.el9.aarch64
$ rpm -ql nginx | head # 这个包装了哪些文件
$ rpm -qa | grep nginx # 装了哪些 nginx 相关包
dnf provides 特别实用——遇到「command not found」但不知道该装什么包时,一查就知道。
仓库配置
$ ls /etc/yum.repos.d/
rocky.repo rocky-extras.repo epel.repo
$ cat /etc/yum.repos.d/rocky.repo
- [baseos]
- 方括号里是仓库 ID,唯一标识。
- name=
- 人看的描述名。
- baseurl=
- 软件包从哪下载。换国内源就是改这个。
- mirrorlist=
- 镜像列表地址,会自动挑一个可用的。用 baseurl 时要把它注释掉,否则它优先。
- enabled=1
- 是否启用这个仓库。
- gpgcheck=1
- 是否校验软件包签名。别关掉——这是防止装到被篡改的包的最后一道防线。
换国内源
# 先备份(Day 02 的规矩)
$ sudo cp -a /etc/yum.repos.d /etc/yum.repos.d.bak.$(date +%F)
# 用 sed 批量替换(Rocky 9 用 vault 结构)
$ sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak /etc/yum.repos.d/rocky*.repo
# 重建缓存
$ sudo dnf clean all
$ sudo dnf makecache
$ dnf repolist
dnf repolist 看仓库还在不在、sudo dnf install -y tree 试装一个小包。
改错了 repo 文件,之后所有装包操作都会失败——所以改之前备份、改之后立刻验证。
EPEL 仓库
$ sudo dnf install -y epel-release
$ dnf repolist | grep epel
EPEL(Extra Packages for Enterprise Linux)是 Fedora 社区为 RHEL 系维护的额外软件仓库。htop、fail2ban、nload 这些常用工具官方源里没有,都在 EPEL 里。
$ sudo dnf install -y htop ncdu tree bash-completion
- htop
- 比
top好看好用,能用方向键选进程、直接按 F9 杀。 - ncdu
- 交互式的 du——Day 21 那种逐层找大目录,用它可以直接用方向键钻进去,比敲一层层 du 快得多。
- bash-completion
- Tab 补全增强。装完重新登录,
systemctl sta+ Tab 能补出start,还能补服务名。
内网怎么办:自建仓库
很多企业的服务器根本不能上外网。这时候的标准做法是自建一个内网 yum 仓库:
# 在一台能上网的机器上
$ sudo dnf install -y createrepo httpd
$ sudo mkdir -p /var/www/html/rocky9
# 把 rpm 包放进去(同步官方源,或从光盘拷)
$ sudo createrepo /var/www/html/rocky9 # 生成仓库元数据
$ sudo systemctl enable --now httpd
# 在内网其他机器上,写一个 repo 文件指向它
[local]
name=Local Repo
baseurl=http://10.0.0.5/rocky9
enabled=1
gpgcheck=0
如果你投的是国企、事业单位、金融、制造业这类内网环境为主的岗位,能说出"内网环境我们自建本地 yum 仓库,用 createrepo 生成元数据,通过 httpd 提供服务",会让对方觉得你懂他们的实际场景。
装包历史
$ sudo dnf history # 所有操作记录
ID | Command line | Date | Action(s) | Altered
8 | install -y htop ncdu | 2026-09-07 15 | Install | 3
7 | install -y nginx | 2026-09-06 22 | Install | 5
$ sudo dnf history info 8 # 看某次操作的详情
$ sudo dnf history undo 8 # ← 撤销某次安装!
dnf history undo 是个救命功能——装错了东西、或者更新后出问题,可以整批回滚。比一个个 remove 靠谱得多。
今天的面试点
「dnf 是 yum 的新一代,RHEL 8 之后 yum 只是指向 dnf 的软链接。底层都是 rpm,但 rpm 不解决依赖,dnf 在它之上加了依赖解析和仓库管理。」
「repo 文件放在 /etc/yum.repos.d/,关键字段是 baseurl、enabled、gpgcheck。换国内源就是改 baseurl,改完 dnf clean all && dnf makecache。」
加分:「内网环境我们会自建本地仓库,用 createrepo 生成元数据,通过 httpd 或 nfs 提供给内网机器。」
今天的练习
dnf repolist看当前仓库,cat /etc/yum.repos.d/rocky.repo认一遍字段sudo dnf install -y epel-release,然后装htop ncdu tree bash-completion- 试试 ncdu:
sudo ncdu /var,用方向键钻进去找大目录,体会比du快多少 dnf provides ss和rpm -qf /etc/nginx/nginx.conf,练两种反查sudo dnf history,看看你这台机器装过什么、什么时候装的- 选做:备份 repo 目录,换成阿里云源,
dnf makecache后试装一个包验证
Day 25 讲 crontab 定时任务,第五周收尾。那个「脚本手动跑没问题、定时跑就失败」的经典坑,Day 02 埋的伏笔终于要填了。