APT、apt 和 apt-get

Cover image
🛹 TL;DR

本文介绍 Linux 系统中的 apt 命令和 apt-get 之间的区别。同时也会列出几个常用的 apt命令及其被它们取代的相对应的 apt-get 命令。

首先,回到2016年。那时,蔡英文就职成为了总统,朴槿惠被罢免了总统;金正恩还在放烟花,英国还是个欧洲国家;只需要花 6988 块的顶配 iPhone ,看完前2个圈就能关电视的一级方程式比赛;Frank Lee 还是个初中生,而 Donald Trump 还在卖房...... 不过最值得一提的,是 Ubuntu 16.04 的发行,其中的包管理器就从 apt-get变成了 apt。事实上,apt早在 2014 就被推出了,但人们是自从 2016 年 Ubuntu 16.04 的发行后才开始注意到它。

现在,比起 apt-get install <package>, 人们更常见到的开始变成apt install <package>。于是,好多其他的 Debian 派生的 Linux 发行版开始跟随 Ubuntu 的步伐并鼓励用户使用 apt 而非 apt-get。

此时此刻,有人也许会好奇:“apt和apt-get有啥不一样的?”、“既然已经有一个包管理器了,为啥要做个新的?”、“apt在什么方面优于apt-get?”、“实际用起来哪个好些?” 本文解决的,就是上述的几个问题。

apt vs apt-get

关于 Linux Mint 中的 apt

前几年,Linux Mint 做了一个叫 apt 的 python 模块。它实则用的是 apt-get,但也增加了一些实用的选项。本文所讨论的apt和 Linux Mint 里面的那个并不是同一个。

在探究 apt 和 apt-get 的区别之前,我们先了解一下关于这些命令的背景知识。

为什么会有 apt?

Debian可以说是 Ubuntu Linux Mint、elementary、 OS等发行版的祖宗了。它有一个可靠的软件包系统,并且系统里每一个软件都是二进制或者原始码格式的软件包。为了管理这套系统,Debian 用了一套叫作 APT(Advanced Packaging Tools) 的工具。请不要把它和 apt命令搞混淆,它俩是不一样的。

在 Debian 派生的 Linux 发行版里面,可以调用 APT 来安装、删除、和更新软件包的工具是多样的。比如之前提到的 apt和apt-get 就是这样的 CLI 工具。除此以外,Aptitude 也是这样的一个工具,它同时提供了 CLI 和 GUI 界面。

如果上维基翻一番,你也许还会发现像 apt-cache这样的命令。而问题就出在这了。

你看,这些命令过于底层,如果你是一个普普通通的 Linux 用户的话,这里面有一部分功能你可能从来都不会用到。另外,大部分的常用的包管理命令同时分散在了apt-get和apt-cache之间。

这个问题随着apt的面世而得到了解决。apt包含apt-get和apt-cache中的常用功能,同时撇开了它们中的一些模棱两可和不常用的功能。同时,apt可以管理 apt.conf 文件。

有了apt,用户便不用在apt-get和apt-cache之间折腾来管理软件包。apt具有更加严谨的结构,需要用到的包管理命令也基本上是应有尽有。

Bottom line: apt = apt-get和 apt-cache中最常用的选项。

apt 和 apt-get 之间有什么不同?

有了apt, 用户的手头上有了经统一整理的必要工具, 而免于在成堆的选项中迷失自我。apt的目标也正是为最终用户提供一套愉快的包管理体验。

比如说,跟使用 apt-get不同的是,在使用 apt 安装或卸载软件时,用户可以看到一个进度条。

apt shows the progress bar
apt shows the progress bar

再比如说,当用户更新 apt 的软件源仓库时,apt 同时可以提醒他们待更新的软件包的数目。

当然,加了参数项的apt-get也能实现类似的功能。但在apt里面,这些功能是默认开启的。

apt 和 apt-get的命令之间有什么不同?

虽说apt和apt-get的选项有很多相似的地方,但这不代表说apt对于apt-get是 backward compatible 的。顾名思义,如果单纯把一个apt-get命令里面的 “apt-get"字样换成”apt“,运行不一定成功。

先来看看apt的命令具体替换了哪些 常用的apt-get和 apt-cache的命令。

apt命令 相应的被替换的apt-get和apt-cache命令 功能
apt install apt-get install 安装一个包
apt remove apt-get remove 卸载一个包
apt purge apt-get purge 卸载一个包及其配置文件
apt update apt-get update 更新仓库
apt upgrade apt-get upgrade 更新所有可以更新的包
apt autoremove apt-get autoremove 删除无用的依赖
apt full-upgrade apt-get dist-upgrade 更新所有可以更新的包并自动管理(删除)依赖
apt search apt-cache search 搜索一个包
apt show apt-cache show 显示一个包的详细信息

apt也有几个独有的命令。

new apt command function of the command
apt list 列出已下载的包,并显示其状态(如 installed、 upgradable 等)
apt edit-sources 编辑下载源

值得指出的是,apt 是被长期维护的。所以在未来也会看到有新的选项加入。

那,apt-get 是 deprecated 了吗?

笔者并没有找到任何关于 apt-get 会停止服务的消息。而且也不太可能会。毕竟,apt-get还是提供了更多的功能的。

对于比较低端的操作,比如说脚本,apt-get还是比较常用的。

该用哪个?

读到这里,大家也许会想着该用 apt还是 apt-get。而作为一个普普通通的 Linux 用户,我会选择 apt (pacman🤦)。

apt是被大多数 Debian 派生的 Linux 发行版认可并推荐的命令,而且提供了我需要用来管理软件包的全部选项。最重要的是,它的选项更加简单

除非需要用到apt-get里面的那些额外的功能,否则我也找不到继续使用它的理由了。

写在最后

希望本文表达清楚了 apt和 apt-get之间的区别。如果要总结本次讨论的内容,那就是:

  • apt命令是 apt-get 和 apt-cache命令的并集的一个子集,其中包含了正常的包管理所必需的选项;
  • 虽然说apt-get没有deprecated,但是对于普通用户,本文推荐使用apt而非apt-get。
◀ Fragments | 招新Why iOS Updates can't brick ▶