服务端阅读 06月21日 21:42
APT、DNF/YUM 和 Pacman 常见操作有哪些?
Linux 下装软件,最怕的不是命令记不住,而是把不同发行版的包管理器混着用:Ubuntu 上找 yum,Arch 上只跑 pacman -Sy,RHEL 新版本里还在把 yum 当主角。结果轻则装不上包,重则依赖版本被搞乱。这篇按日常运维最常见的场景整理 APT、DNF/YUM、Pacman 的用法:安装、升级、删除、查询、仓库管理、PPA/EPEL/AUR,以及遇到锁、依赖损坏、数据库异常时怎么处理。先分清它们分别用在哪些系统| 包管理工具 | 常见发行版 | 底层包格式 | 说明 ||---|---|---|---|| APT | Debian、Ubuntu、Linux Mint | .deb | 日常用 apt,脚本里更推荐 apt-get / apt-cache || DNF | Fedora、RHEL 8+、CentOS Stream、Rocky/AlmaLinux 8+ | .rpm | 现代 RHEL 系默认包管理器,基本取代 YUM || YUM | CentOS 7、RHEL 7 及更早版本 | .rpm | 老系统常用;新系统里 yum 多数只是兼容入口 || Pacman | Arch Linux、Manjaro、EndeavourOS | .pkg.tar.zst | 速度快、模型简单,但不要做部分升级 |APT、DNF/YUM、Pacman 负责解决依赖、从仓库下载软件、记录安装状态。dpkg 和 rpm 更接近底层包工具,能安装本地包,但不会像上层包管理器那样自动处理远程依赖。APT 常见操作APT 主要用于 Debian/Ubuntu 系统。交互式操作可以用 apt,自动化脚本更建议用 apt-get 和 apt-cache。sudo apt updatesudo apt upgradesudo apt full-upgradesudo apt install nginxsudo apt remove nginxsudo apt purge nginxsudo apt autoremoveapt search nginxapt show nginxapt list --installedapt-cache policy nginxapt update 只是刷新本地软件包列表,不会升级已安装软件。remove 删除软件但通常保留配置文件,purge 连配置文件一起删除,autoremove 清理不再被依赖的包。dpkg 用来直接处理 .deb 包。它不会主动从网络仓库解决依赖,所以本地安装 deb 包后如果报依赖缺失,通常要再用 APT 修复。sudo dpkg -i package.debsudo apt -f installdpkg -L nginxdpkg -S /usr/sbin/nginxsudo dpkg --configure -aUbuntu/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 为主。sudo dnf install nginxsudo dnf upgradesudo dnf check-updatesudo dnf remove nginxsudo dnf autoremovesudo dnf search nginxsudo dnf info nginxsudo dnf list installedsudo dnf clean allsudo dnf provides /usr/sbin/nginx老系统中对应命令是 yum install、yum update、yum remove、yum search。DNF/YUM 的 history 很适合排查“昨天装了什么之后服务坏了”。sudo dnf historysudo dnf history info 12sudo dnf history undo 12rpm 是 RHEL 系的底层包工具,类似 Debian 系里的 dpkg。sudo rpm -ivh package.rpmsudo rpm -Uvh package.rpmsudo rpm -e package-namerpm -qa | grep nginxrpm -qi nginxrpm -ql nginxrpm -qf /usr/sbin/nginxrpm -VaEPEL 很方便,但生产环境不要无脑启用一堆第三方仓库。仓库越多,版本冲突和依赖覆盖的概率越高。Pacman 常见操作Pacman 是 Arch 系发行版的核心包管理工具。它的命令短,但有一个重要原则:不要做部分升级。sudo pacman -Syusudo pacman -S nginxsudo pacman -R nginxsudo pacman -Rs nginxpacman -Qpacman -Ss nginxpacman -Si nginxpacman -Ql nginxpacman -Syu 是 Arch 上最常用、也最安全的更新方式:同步软件包数据库并升级整个系统。不要长期只执行 sudo pacman -Sy package-name,这容易造成“本地系统还是旧依赖,但数据库指向新依赖”的部分升级问题。Pacman 会保留下载过的软件包缓存,方便回滚,但时间久了会占不少空间。sudo pacman -Scsudo pacman -S pacman-contribsudo paccache -rsudo paccache -rk2AUR 是 Arch 用户仓库,里面是用户维护的构建脚本,不是官方二进制仓库。常见 AUR helper 有 yay、paru。安装前至少看一下 PKGBUILD,生产服务器不太建议依赖 AUR。常见排查:锁文件、依赖损坏和数据库异常APT 锁被占用时,先看是不是系统正在自动更新,别上来就删锁文件。ps aux | grep -E 'apt|dpkg'sudo dpkg --configure -asudo apt -f installDNF/YUM 也先检查是否有其他包管理进程:ps aux | grep -E 'dnf|yum|rpm'sudo dnf clean allsudo dnf makecachePacman 锁文件通常在 /var/lib/pacman/db.lck,也要先确认没有正在运行的 pacman,再删除锁。Arch 上很多问题来自部分升级,先尝试完整升级:sudo pacman -Syu日常使用建议先确认发行版,再选包管理器。Ubuntu/Debian 用 APT,RHEL 新系统用 DNF,CentOS 7 这类老系统用 YUM,Arch 用 Pacman。脚本里优先用稳定命令,Debian/Ubuntu 脚本建议 apt-get、apt-cache;人工操作用 apt 更舒服。不要混用来源。同一个软件尽量别同时用系统仓库、第三方仓库、手动 deb/rpm、源码安装,否则后续升级和卸载都难排查。第三方仓库要克制,PPA、EPEL、AUR 都好用,但不是越多越好。看到锁先等,不要先删。Arch 不做部分升级。底层工具少直接用,能用 APT/DNF/YUM 解决依赖时,别手动硬装。快速命令对照| 场景 | APT | DNF | YUM | Pacman ||---|---|---|---|---|| 更新索引 | sudo apt update | sudo dnf makecache | sudo yum makecache | sudo pacman -Sy || 升级系统 | sudo apt upgrade | sudo dnf upgrade | sudo yum update | sudo pacman -Syu || 安装软件 | sudo apt install nginx | sudo dnf install nginx | sudo yum install nginx | sudo pacman -S nginx || 删除软件 | sudo apt remove nginx | sudo dnf remove nginx | sudo yum remove nginx | sudo pacman -R nginx || 搜索软件 | apt search nginx | dnf search nginx | yum search nginx | pacman -Ss nginx || 查看包信息 | apt show nginx | dnf info nginx | yum info nginx | pacman -Si nginx || 清理缓存 | sudo apt clean | sudo dnf clean all | sudo yum clean all | sudo pacman -Sc |真正需要特别记住的是几个差异点:现代 RHEL 系优先 DNF,Ubuntu 脚本优先 apt-get,Arch 不做部分升级,第三方仓库和 AUR 要谨慎使用。