刚装完一台 Ubuntu照着网上的教程敲yum install nginx结果提示 command not found换到 Rocky Linux 上同事又说别用 yum 了用 dnf听群里有人吹 Arch 的 pacman 一条命令全搞定。apt、yum、dnf、pacman 这四个名字天天挂在嘴边它们到底差在哪、新机器上该用哪个这篇一次说清。一、先分阵营deb 和 rpm 两大体系Linux 发行版再多软件包格式基本就两大家族外加 Arch 自己一套。阵营包格式底层工具上层命令代表发行版Debian 系.debdpkgapt / apt-getDebian、Ubuntu、Linux Mint、KaliRHEL 系.rpmrpmyum / dnfRHEL、CentOS、Rocky、Fedora、AlmaLinuxArch 系.pkg.tar.zstpacmanpacman底层上层合一Arch、Manjaro、EndeavourOS理解这个分层很关键dpkg 和 rpm 是底层负责把包文件解开、拷到对应位置、登记进本地数据库apt、yum、dnf 是上层负责联网找仓库、算依赖、自动把一串依赖包拉下来。平时九成操作你只碰上层命令但出问题时得知道底层还在那儿。二、四大工具速查表工具所属阵营仓库配置位置本地数据库特点aptDebian/Ubuntu/etc/apt/sources.list及sources.list.d//var/lib/dpkg/status生态最大文档最多yumRHEL/CentOS 7 及更早/etc/yum.repos.d/*.repo/var/lib/rpm/老牌兼容性好dnfRHEL 8、Fedora同 yum同 yumyum 的继任者依赖解析更快pacmanArch/etc/pacman.conf、/etc/pacman.d/mirrorlist/var/lib/pacman/极简、滚动更新Rocky Linux 8 开始默认用 dnfyum命令其实是 dnf 的软链接敲yum install照样能跑。CentOS 7 是最后一个把 yum 当主力的版本2024 年底 EOL 之后还在跑的机器不多了。三、aptDebian/Ubuntu 系Ubuntu 是国内服务器和开发者本机最常见的发行版apt 自然也是见面率最高的包管理器。语法格式apt[选项]子命令[包名]常用子命令命令作用sudo apt update刷新仓库索引装软件前必跑sudo apt upgrade升级所有可升级的包sudo apt install 包名安装包sudo apt remove 包名卸载但保留配置文件sudo apt purge 包名卸载并删掉配置apt search 关键词搜索包apt show 包名看包的详细信息apt list --installed列出已安装的包示例与预期输出先刷新索引再装 nginxsudoaptupdatesudoaptinstall-ynginxapt update的预期输出节选Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [118 kB] Fetched 118 kB in 2s (59.0 kB/s) Reading package lists... Done要分清apt update和apt upgrade前者只更新有哪些包、版本是多少的清单后者才真正下载安装。很多人新装系统直接apt install报Unable to locate package就是没先 update。四、yum 与 dnfRHEL 系CentOS 7 用 yumRocky 8/9、AlmaLinux 9、Fedora 全用 dnf。命令几乎一一对应把 yum 换成 dnf 就行。常用子命令命令作用sudo dnf install 包名安装sudo dnf remove 包名卸载sudo dnf update升级全部sudo dnf search 关键词搜索sudo dnf info 包名看详情dnf repolist列出已启用的仓库dnf list installed列已安装的包示例与预期输出sudodnfinstall-ynginx预期输出节选Last metadata expiration check: 0:14:22 ago on Wed 16 Sep 2026 02:30:15 PM. Dependencies resolved. Package Arch Version Repository Size Installing: nginx x86_64 1:1.20.1-14.el9 appstream 569 k Transaction Summary Install 1 Package Total download size: 569 k Installed size: 1.7 M ... Complete!dnf 比 yum 快主要靠的是 libsolv 这个用 C 写的依赖解析器装包时算依赖关系明显利索。日常手敲yum不报错但写脚本、写文档里建议直接用dnf。五、pacmanArch 系Arch 主打极简和滚动更新pacman 一个工具把底层和上层全包了。常用操作命令作用sudo pacman -Syu同步仓库并升级全部Arch 的日常更新sudo pacman -S 包名安装sudo pacman -Rns 包名卸载包及不再需要的依赖和配置pacman -Ss 关键词搜索远程仓库pacman -Qs 关键词搜索本地已装的包pacman -Q列出所有已装包示例与预期输出sudopacman-Snginx预期输出节选resolving dependencies... looking for conflicting packages... Packages (1): nginx-1.26.2-1 Total Download Size: 0.52 MiB Total Installed Size: 1.41 MiB :: Proceed with installation? [Y/n]Arch 不区分刷新索引和升级两个动作-Syu一条同时干。这也意味着 Arch 没有只升级个别包的温和策略常年跟着滚动走机器别太久不开机一跨几个月再-Syu容易碰上中间版本的依赖断点。六、常用操作一张对照表记不住每个工具的子命令按动作查这张表动作Debian/UbuntuRHEL 系Arch刷新索引apt updatednf check-update含在-Syu里装包apt installdnf installpacman -S卸包apt removednf removepacman -Rns升级全部apt upgradednf updatepacman -Syu搜包apt searchdnf searchpacman -Ss看详情apt showdnf infopacman -Si列已装apt list --installeddnf list installedpacman -Q清理孤儿依赖apt autoremovednf autoremovepaccache -r七、知识扩展包管理器到底在替你做什么不管哪套工具装一个软件的本质流程都一样读本地仓库索引找到包名对应的下载地址和版本解析依赖——A 依赖 BB 又依赖 C整条链一起拉下来下载包文件到本地缓存目录调用底层工具dpkg/rpm/pacman把文件解开二进制放/usr/bin库放/usr/lib配置放/etc把装了哪些文件、版本多少写进本地数据库有需要时跑包自带的安装后脚本比如建运行用户、注册 systemd 服务。搞懂这六步两个常见困惑就有答案了。为什么装个软件经常顺带塞进来一堆东西因为第二步把整条依赖链都算上了apt install输出里那段 “The following additional packages will be installed” 就是在列这个。为什么卸软件要再跑一遍 autoremove因为 install 时拉进来的依赖在你卸主包时默认还留在系统里autoremove专门清理现在没人再依赖它的孤儿包。八、怎么选服务器跑生产跟发行版走就对了Ubuntu/Debian 用 aptRocky/RHEL 用 dnf别往上面硬装另一套包管理器——deb 和 rpm 混着装两套数据库各记各的依赖迟早乱套。想折腾、追新软件版本Arch 的 pacman 顺手AUR 仓库几乎什么都找得到代价是你得自己扛滚动更新偶尔出的岔子。至于选哪个发行版做主力那是另一个话题不在这篇展开。
