刚装上 Linux 的人,常会在同一件小事上卡住:想装个软件,却不知道敲哪条命令。
翻教程时会发现,有人让你用 apt,有人让你用 dnf,还有人写 pacman,或者 zypper。
明明是同一个动作,为什么会有四种说法。
这不是有人故意折腾新手,背后是一段从九十年代讲起的分家史。
先说清楚,在 Linux 上装软件,到底是谁在干活。
有一个东西专门替你干这件事,它叫包管理器。
所谓「包」,就是把程序和它要用到的文件,一起装进一个盒子里。
而「仓库」不是随便一个下载站,是发行版自己整理好的名单,写着每个包是谁维护的、对应什么版本。
名单上那些包,多半不是厂商自己塞进去的,是发行版的维护者打包放进去的。
你告诉包管理器想要什么,它去仓库里找,把要凑的东西一起取回来,装好,再记上一笔账。
记账这一条最容易被忽略,却最要紧。
有了这本账,卸载才卸得干净,升级也才知道该动哪几个包。
今天的包管理器还要管另外几件事:包有没有被人改过、来源可不可信、装到一半失败怎么退回去。
平时你不一定直接见到它:图形界面里那个软件管理器、任务栏上的更新提示,背后都是它在做事。
如果没有它,装软件会是什么样。
早年就是这样:程序自己下、源码自己编译,缺哪个库自己去补。
麻烦的根子在依赖:一个软件背后常常站着十几个库,库还有版本要求,谁先谁后都有讲究。
更麻烦的是版本:这个软件要老版本,那个要新版本,两个凑不到一块,就装不上了。
有时候为了装一个东西,一晚上就搭进去了。
所以很快有人想把这活交出去。
1994 年,Debian 项目先做了一个小工具,叫 dpkg。
它能按清单把一个包铺进系统,但缺了别的东西,得你自己补。
1998 年,同一个项目又做了一个更聪明的:apt。
它会自己上网把缺的东西取回来,再按顺序装好。
几乎同一时候,红帽那边做出了 RPM,思路差不多,规矩不一样。
分家就是从这里定下来的。
Debian 家用 .deb 格式的包,红帽家用 .rpm,两边的包不能混着装。
各自的工具,也只认自己那一套格式。
为什么会这样?因为 Linux 从来不是一家公司做出来的东西。
内核是一拨人在写,发行版是各个团队自己拼的,谁也没义务听谁的。
大家各做各的,时间一长,就有了各自的习惯和各自的工具。
2002 年,Arch 这个发行版出来的时候,干脆自己写了一个 pacman。
到今天,能叫得上名字的包管理器已经是一大串。
为什么不能干脆统一成一种?技术上不算难,难的是规矩。
发版的节奏、测试的流程、签名的方式、出了事谁负责,各家都不一样。
这些事谈不拢,格式也就统一不了。
而且各家也不想改:老规矩用了几十年,用户、文档、脚本全围着它转,动一下就伤一大片。
对你来说,最直接的感受是换一家就得重新学一遍。
从 Debian 系换到红帽系,第一件不习惯的事,就是命令全变了。
同一个软件,在不同家里的包名也可能不一样。
网上抄来的教程,往往只在作者那一系上成立。
所以老手写文档时,常常先问你用的是哪一系,再决定写哪条命令。
于是新手的印象就是:Linux 好麻烦。
其实麻烦的不是操作,是说法太多。
真要说操作,四家做的事几乎一样:装、卸、升级。
Debian 家敲 apt,红帽家敲 dnf,Arch 敲 pacman,SUSE 敲 zypper。
学会一家,换到另一家,看一眼帮助就能猜出来。
如果你用的是一台常见的发行版,那多半属于 Debian 这一系,命令就是 apt。
给你一个具体的感受:我这台电脑上,系统自己就装了 2582 个软件包。
这些包互相依赖,全靠包管理器在中间记账,手工维护想都不敢想。
早就有人受不了这种各自为政,做了一个哪一系都能用的装法。
Flatpak、Snap、AppImage 这类格式,相当于一个万能插头。
不管你用的是哪一系,同一个软件都能这么装上。
代价也不小:包更大,各装各的,跟系统自带的那套还是两回事。
所以今天两种办法并存,各有各的用处。
回到最开始那个问题:四种说法,不是四家要争个高低。
它们只是碰上了同一个问题,各答了一次。
Linux 世界就是这样长起来的,没有一个中心来拍板。
你用的那一家,命令是固定的,学会一套就够用了。
剩下的那些名字,知道它们存在就够了。
热门跟贴