Linux 发行版虽然多,包管理基本分两大家族:Debian/Ubuntu 用 APT(.deb 包),RHEL/CentOS/Fedora/Rocky 用 DNF(.rpm 包,YUM 的后继)。本文给出对照速查,并讲几件手册之外但天天会碰到的事。
日常操作对照表
| 目的 | APT (Debian/Ubuntu) | DNF (RHEL 系) |
|---|---|---|
| 刷新软件源索引 | sudo apt update | sudo dnf check-update(通常可省,自动刷新) |
| 安装 | sudo apt install nginx | sudo dnf install nginx |
| 升级全部 | sudo apt upgrade | sudo dnf upgrade |
| 卸载 | sudo apt remove nginx | sudo dnf remove nginx |
| 卸载+清配置 | sudo apt purge nginx | sudo dnf remove nginx(rpm 无独立配置清理,需手动删) |
| 搜索 | apt search 关键词 | dnf search 关键词 |
| 查看包信息 | apt show nginx | dnf info nginx |
| 列出包内文件 | dpkg -L nginx | rpm -ql nginx |
| 查文件属于哪个包 | dpkg -S /usr/sbin/nginx | rpm -qf /usr/sbin/nginx 或 dnf provides */nginx |
| 清理不用的依赖 | sudo apt autoremove | sudo dnf autoremove |
最常见的误解:apt update 不升级任何东西
apt update 只是从软件源下载最新的包索引(有哪些包、什么版本),系统上的软件一个都没动。真正的升级是 apt upgrade。所以正确流程是两条一起跑:
sudo apt update && sudo apt upgrade -y只跑第二条会用旧索引升级,经常提示「已是最新」而实际上源里有新版。DNF 系没有这个问题,dnf upgrade 会自动刷新元数据。
另外区分:apt full-upgrade(旧称 dist-upgrade)允许为升级而增删包,内核大版本、桌面环境升级时才需要;日常安全更新用 upgrade 即可。
查文件归属:排障神器
服务器上发现一个陌生文件 /usr/local/bin/xyz,想知道是不是包管理器装的:
# Debian 系dpkg -S /usr/local/bin/xyz
# RHEL 系rpm -qf /usr/local/bin/xyz如果查不到,说明它是手工编译安装或脚本释放的,卸载和升级都得自己管。反过来,想找「提供 dig 命令的包叫什么」:
apt-file search bin/dig # 需先装 apt-filednf provides '*/bin/dig' # DNF 原生支持路径通配答案分别是 dnsutils(新版为 bind9-dnsutils)和 bind-utils——包名和命令名不一致是常态,查一下比猜快。
版本锁定与暂缓升级
数据库这类对版本敏感的服务,你可能不希望它被 upgrade 顺手升级:
# APTsudo apt-mark hold mysql-server # 锁定sudo apt-mark unhold mysql-server # 解锁apt-mark showhold # 查看锁定列表
# DNF(需 versionlock 插件)sudo dnf install python3-dnf-plugin-versionlocksudo dnf versionlock add mysql-server锁定只是「不自动升」,手动 install 包名=版本号 仍可指定版本。
卸载残留与自动依赖
apt remove 会保留配置文件(方便重装后找回配置),要彻底清理用 purge。装包时被顺带拉进来的依赖,卸载主包后不会自动消失,定期 sudo apt autoremove --purge 保持系统干净。
DNF 的 remove 默认行为接近 remove + autoremove 的组合(会提示移除孤儿依赖),但 /etc 下手工改过的配置文件不会动,需要时手动删。
几点安全建议
- 生产环境别用
-y盲升:先apt list --upgradable或dnf check-update看看要动哪些包,数据库、内核类单独安排窗口。 - 别混用第三方源:一个
.deb包强行装在不匹配的发行版版本上,依赖地狱就是这么来的。优先用官方源,第三方源确认其支持你的发行版代号。 - 内核升级要重启才生效:
needrestart(Debian)或dnf needs-restarting -r可以告诉你哪些服务或系统本身需要重启。 - 个人软件装到用户目录:
/opt、~/bin、或 Flatpak/AppImage,别把手工编译的东西塞进/usr/bin,与包管理器抢地盘。
延伸阅读
- Debian APT 用户指南
- DNF 官方文档
man 8 apt、man 8 dnf、man 1 dpkg、man 8 rpm
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 39 天
部分内容可能已过时