APT、apt 和 apt-get

🛹 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
的软件源仓库时,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
。