centos 8+默认使用dnf,yum仅为指向dnf的符号链接;运行rpm -q yum dnf可查两者是否共存,alias yum或ls -l /usr/bin/yum可确认其实际指向。

怎么确认当前系统用的是 yum 还是 dnf
CentOS 8+、RHEL 8+ 和 Fedora 默认已切换到 dnf,但命令仍兼容 yum 别名;而 CentOS 7 及更早版本才是真·yum。直接运行 yum --version 看输出里有没有 dnf 字样,比查文档更快。
关键区别在于:配置文件路径一致(/etc/yum.repos.d/),但 dnf 对 repo 文件语法更严格,比如不支持过时的 gpgcheck=1 却没配 gpgkey —— 这会导致 dnf makecache 失败,但 yum 可能默默跳过。
- 运行
rpm -q yum dnf查看是否两者都装了(常见于升级过渡期) - 用
alias yum看它实际指向哪个二进制(/usr/bin/dnf还是/usr/bin/yum) - 别盲目复制老教程里的
yum-config-manager命令——RHEL 8+ 默认没装这个包,得先dnf install yum-utils
添加第三方源:直接写 .repo 文件最稳
别依赖 yum-config-manager --add-repo 自动下载并生成 repo 文件,它对 HTTPS 重定向、认证响应、非标准 HTML 页面极其敏感,经常生成空文件或带乱码的 .repo,且不会报错。
手动创建更可控,比如加 EPEL 源:
[epel] name=Extra Packages for Enterprise Linux $releasever - $basearch baseurl=https://dl.fedoraproject.org/pub/epel/$releasever/Everything/$basearch enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
-
baseurl中的$releasever和$basearch是 yum/dnf 内置变量,会自动替换(如 7 → 7,aarch64 → aarch64),别手写死 -
enabled=0表示默认不启用,适合测试源;设为1才参与安装搜索 - 若提示
GPG key retrieval failed,先确认gpgkey路径是否存在,再用rpm --import <key_path></key_path>手动导入(尤其自建私有源时)
为什么 yum makecache 报错却找不到原因
常见现象是执行后卡住几秒,然后静默退出,但后续 yum install 仍提示 “No package found”——其实 cache 没建成功,只是错误被吞了。
真正该看的是 yum makecache --verbose 或直接 dnf makecache --refresh(--refresh 强制重拉元数据,暴露真实网络/校验错误)。
- 典型错误:
Cannot download 'https://xxx': Cannot open: No such file or directory.—— 实际是 baseurl 路径不存在,不是网络不通 - 遇到
Failed to synchronize cache for repo 'xxx',先curl -I测 baseurl 是否返回 200,别急着重启服务 - 私有源用 HTTP 且没配
gpgcheck=0,会因缺失 GPG 校验直接失败,日志里只显示 “skipping” 不报错
多个同名仓库冲突怎么办
当两个 .repo 文件里都有 [nginx],yum/dnf 会合并它们的配置,但 baseurl、gpgkey 等字段只取最后一个文件里的值,前面的被覆盖——这很隐蔽,尤其用自动化脚本批量加源时。
检查方法:运行 dnf repolist -v | grep -A 5 "Repo-id",看每个 repo 的完整路径和实际生效的 baseurl。
- 命名唯一:给 repo ID 加发行版后缀,比如
[nginx-el7]、[nginx-el8] - 禁用不用的源:用
dnf config-manager --disable xxx,比删文件安全,也方便回滚 - 临时禁用某源:安装时加
--disablerepo=xxx,比全局改配置更精准
repo 文件名本身不影响加载顺序,但字母序靠前的文件(如 a.repo)会被先读取,所以别用 00-xxx.repo 期望它“优先”,没用。










