6月21日 21:42

APT、DNF/YUM 和 Pacman 常见操作有哪些?

Linux 下装软件,最怕的不是命令记不住,而是把不同发行版的包管理器混着用:Ubuntu 上找 yum,Arch 上只跑 pacman -Sy,RHEL 新版本里还在把 yum 当主角。结果轻则装不上包,重则依赖版本被搞乱。

这篇按日常运维最常见的场景整理 APT、DNF/YUM、Pacman 的用法:安装、升级、删除、查询、仓库管理、PPA/EPEL/AUR,以及遇到锁、依赖损坏、数据库异常时怎么处理。

先分清它们分别用在哪些系统

包管理工具常见发行版底层包格式说明
APTDebian、Ubuntu、Linux Mint.deb日常用 apt,脚本里更推荐 apt-get / apt-cache
DNFFedora、RHEL 8+、CentOS Stream、Rocky/AlmaLinux 8+.rpm现代 RHEL 系默认包管理器,基本取代 YUM
YUMCentOS 7、RHEL 7 及更早版本.rpm老系统常用;新系统里 yum 多数只是兼容入口
PacmanArch Linux、Manjaro、EndeavourOS.pkg.tar.zst速度快、模型简单,但不要做部分升级

APT、DNF/YUM、Pacman 负责解决依赖、从仓库下载软件、记录安装状态。dpkgrpm 更接近底层包工具,能安装本地包,但不会像上层包管理器那样自动处理远程依赖。

APT 常见操作

APT 主要用于 Debian/Ubuntu 系统。交互式操作可以用 apt,自动化脚本更建议用 apt-getapt-cache

bash
sudo apt update sudo apt upgrade sudo apt full-upgrade sudo apt install nginx sudo apt remove nginx sudo apt purge nginx sudo apt autoremove apt search nginx apt show nginx apt list --installed apt-cache policy nginx

apt update 只是刷新本地软件包列表,不会升级已安装软件。remove 删除软件但通常保留配置文件,purge 连配置文件一起删除,autoremove 清理不再被依赖的包。

dpkg 用来直接处理 .deb 包。它不会主动从网络仓库解决依赖,所以本地安装 deb 包后如果报依赖缺失,通常要再用 APT 修复。

bash
sudo dpkg -i package.deb sudo apt -f install dpkg -L nginx dpkg -S /usr/sbin/nginx sudo dpkg --configure -a

Ubuntu/Debian 的仓库配置常见位置包括 /etc/apt/sources.list/etc/apt/sources.list.d/*.list。现在不推荐随手使用老式 apt-key add,更稳妥的方式是把仓库密钥放到 /usr/share/keyrings/,再在源配置中使用 signed-by= 指定密钥文件。

DNF 和 YUM 常见操作

RHEL 系现在要优先看 DNF。Fedora、RHEL 8+、Rocky Linux 8+、AlmaLinux 8+ 默认使用 DNF;CentOS 7、RHEL 7 这类老系统仍然以 YUM 为主。

bash
sudo dnf install nginx sudo dnf upgrade sudo dnf check-update sudo dnf remove nginx sudo dnf autoremove sudo dnf search nginx sudo dnf info nginx sudo dnf list installed sudo dnf clean all sudo dnf provides /usr/sbin/nginx

老系统中对应命令是 yum installyum updateyum removeyum search

DNF/YUM 的 history 很适合排查“昨天装了什么之后服务坏了”。

bash
sudo dnf history sudo dnf history info 12 sudo dnf history undo 12

rpm 是 RHEL 系的底层包工具,类似 Debian 系里的 dpkg

bash
sudo rpm -ivh package.rpm sudo rpm -Uvh package.rpm sudo rpm -e package-name rpm -qa | grep nginx rpm -qi nginx rpm -ql nginx rpm -qf /usr/sbin/nginx rpm -Va

EPEL 很方便,但生产环境不要无脑启用一堆第三方仓库。仓库越多,版本冲突和依赖覆盖的概率越高。

Pacman 常见操作

Pacman 是 Arch 系发行版的核心包管理工具。它的命令短,但有一个重要原则:不要做部分升级

bash
sudo pacman -Syu sudo pacman -S nginx sudo pacman -R nginx sudo pacman -Rs nginx pacman -Q pacman -Ss nginx pacman -Si nginx pacman -Ql nginx

pacman -Syu 是 Arch 上最常用、也最安全的更新方式:同步软件包数据库并升级整个系统。不要长期只执行 sudo pacman -Sy package-name,这容易造成“本地系统还是旧依赖,但数据库指向新依赖”的部分升级问题。

Pacman 会保留下载过的软件包缓存,方便回滚,但时间久了会占不少空间。

bash
sudo pacman -Sc sudo pacman -S pacman-contrib sudo paccache -r sudo paccache -rk2

AUR 是 Arch 用户仓库,里面是用户维护的构建脚本,不是官方二进制仓库。常见 AUR helper 有 yayparu。安装前至少看一下 PKGBUILD,生产服务器不太建议依赖 AUR。

常见排查:锁文件、依赖损坏和数据库异常

APT 锁被占用时,先看是不是系统正在自动更新,别上来就删锁文件。

bash
ps aux | grep -E 'apt|dpkg' sudo dpkg --configure -a sudo apt -f install

DNF/YUM 也先检查是否有其他包管理进程:

bash
ps aux | grep -E 'dnf|yum|rpm' sudo dnf clean all sudo dnf makecache

Pacman 锁文件通常在 /var/lib/pacman/db.lck,也要先确认没有正在运行的 pacman,再删除锁。Arch 上很多问题来自部分升级,先尝试完整升级:

bash
sudo pacman -Syu

日常使用建议

先确认发行版,再选包管理器。Ubuntu/Debian 用 APT,RHEL 新系统用 DNF,CentOS 7 这类老系统用 YUM,Arch 用 Pacman。脚本里优先用稳定命令,Debian/Ubuntu 脚本建议 apt-getapt-cache;人工操作用 apt 更舒服。

不要混用来源。同一个软件尽量别同时用系统仓库、第三方仓库、手动 deb/rpm、源码安装,否则后续升级和卸载都难排查。第三方仓库要克制,PPA、EPEL、AUR 都好用,但不是越多越好。看到锁先等,不要先删。Arch 不做部分升级。底层工具少直接用,能用 APT/DNF/YUM 解决依赖时,别手动硬装。

快速命令对照

场景APTDNFYUMPacman
更新索引sudo apt updatesudo dnf makecachesudo yum makecachesudo pacman -Sy
升级系统sudo apt upgradesudo dnf upgradesudo yum updatesudo pacman -Syu
安装软件sudo apt install nginxsudo dnf install nginxsudo yum install nginxsudo pacman -S nginx
删除软件sudo apt remove nginxsudo dnf remove nginxsudo yum remove nginxsudo pacman -R nginx
搜索软件apt search nginxdnf search nginxyum search nginxpacman -Ss nginx
查看包信息apt show nginxdnf info nginxyum info nginxpacman -Si nginx
清理缓存sudo apt cleansudo dnf clean allsudo yum clean allsudo pacman -Sc

真正需要特别记住的是几个差异点:现代 RHEL 系优先 DNF,Ubuntu 脚本优先 apt-get,Arch 不做部分升级,第三方仓库和 AUR 要谨慎使用。

标签:Linux