原文:apt 和 apt-get 之间有什么区别?
https://aws.amazon.com/cn/compare/the-difference-between-apt-and-apt-get/
陈拓转载,2023/11/23,添加了举例。
apt 和 apt-get 之间有什么区别?
apt 和 apt-get 都是命令行工具。您可以使用这两种工具来管理软件包,例如基于 Debian 的 Linux 服务器和服务器实例上的应用程序和库。由于 Linux 是开源的,因此您可以使用多个软件包选项对其进行自定义,以满足您的需求。基于 Debian 的 Linux 操作系统使用高级软件包工具(APT)来管理 Linux 软件包。apt 命令行工具为最终用户提供更高级别的用户界面,提供直观的命令、生成的行为和安全功能。相比之下,apt-get 命令是一个低级别接口,可以更紧密地与核心 Linux 进程通信。apt 命令是比 apt-get 更易于使用的软件包管理器。
apt 和 apt-get 有什么相似之处?
apt 和 apt-get 都是基于 Debian 的 Linux 发行版(或发行版本,如 Debian、Ubuntu、Linux Mint 和基本操作系统)的包管理器工具。尽管 apt-get 和 apt 是系统默认工具,但也有一些类似的工具,如 aptitude 和 synaptic。
接下来,我们将介绍 apt 和 apt-get 之间的相似之处。
接口
apt 命令行实用工具和 apt-get 命令行实用工具均可通过 Linux 命令行接口(CLI)访问。要使用 Linux CLI,请打开终端窗口或虚拟终端窗口。
文档
要获取 apt 实用程序和 apt-get 实用程序的官方概述,请在命令提示符下输入 apt 或 apt-get。这将为您提供最常见的 apt 命令和 apt-get 命令的列表。
例如,apt update 或 apt-get update 会更新来自官方存储库的可用软件包列表。apt 命令和 apt-get 命令后面还会列出一些选项。例如,apt update --quiet 将向终端提供 apt update 命令不太详细的打印输出。
请注意,如果您不是以管理员身份登录,则需要先将 sudo 命令添加到每个 apt 命令和 apt-get 命令中。例如,您可以输入 sudo apt-get update。
使用案例
apt 和 apt-get 中最常见的任务是安装、更新和删除软件包。软件包可以是应用程序、库、实用程序和工具。
下表显示了两者的常用命令语法。
apt | apt-get |
|
|
举例:
- 更新本地源列表
sudo apt update
- 安装软件包libglib2.0-dev
sudo apt install libglib2.0-dev
- 查看安装情况
sudo apt policy libglib2.0-dev
- 卸载软件包libglib2.0-dev
sudo apt remove libglib2.0-dev
- 卸载软件包libglib2.0-dev并清除与其关联的文件
sudo apt purge libglib2.0-dev
查看卸载情况:
主要区别:apt 与 apt-get
apt 和 apt-get 之间的区别不仅在于 apt 是 apt-get 的较新版本。apt 命令被设计为对用户更加友好的 apt-get 替代方案,结合了多个包管理工具的功能,为用户提供便利。
接下来,我们将讨论 apt 和 apt-get 之间的其他区别。
发布日期
apt-get 于 1998 年在 Debian 2.0(Hamm)发行版中发布,而 apt 于 2014 年在 Debian 8(Jessie)发行版中发布。2014 年之后,apt 取代 apt-get 成为所有基于 Debian 的 Linux 发行版的默认软件包管理器工具。
搜索功能
使用 apt search <package_name> 命令按名称搜索软件包。此命令详细描述了包含所搜索的 package_name 的所有软件包。使用 apt-get 无法执行此操作。相反,您必须使用 apt-cache 命令。
依赖关系解析
任何软件包通常都附带软件依赖项列表,例如正常运行所需的库或工具。在安装软件包之前,必须先安装所有依赖项。
apt 和 apt-get 都可以处理依赖关系解析,但是 apt 的性能要优越得多。它可以确定复杂的依赖关系链,在这些依赖关系链中按正确的顺序安装软件包,并推荐要安装的软件包。
文件系统上的包版本
默认情况下,apt upgrade 命令会在升级时删除系统上不再需要的已安装或可升级软件包的旧版本。
相比之下,apt-get upgrade 命令则不会执行此操作。这种效率使 apt upgrade 能够更好地释放系统内存。
将输出打印到终端
apt-get 和 apt 都可以将状态信息打印到终端,从而深入了解系统在输入命令后执行的操作。apt 命令为用户提供略微详细一些的信息,包括每个任务的进度条。
apt 如何取代 apt-get?
apt 工具现在是基于 Debian 的 Linux 发行版的默认软件包管理实用程序,已经取代了 apt-get 和 apt-cache。大多数 apt-get 命令在每个新的 apt 命令中的编写方式都相同。
但在过去,对于某些命令,必须将 apt-get 与 apt-cache 一起使用。下表显示了现在如何将这几个命令移植到 apt。
apt-cache | apt-get | apt |
apt-cache search | 不支持 | apt search |
apt-cache show | 不支持 | apt show |
apt-cache policy | 不支持 | apt policy |
在任何现有 Linux 脚本中,您都无需将 apt-get 命令替换为 apt 命令。它们仍然可以按预期运行,并且仍然支持 apt-get。较早的 apt-get 命令的某些功能在 apt 中略有变化,因此在脚本中保留 apt-get 有助于确保正确操作。
除非项目或环境需要,否则普通 Linux 用户应该使用 apt 而不是 apt-get。
举例:
- 用apt-cache search命令在本地源列表中搜索libglib2.0-dev
sudo apt-cache search libglib2.0-dev
- 用apt search命令在本地源列表中搜索libglib2.0-dev
sudo apt search libglib2.0-dev
比apt-cache search命令给出更多的信息。
- 用apt-cache show命令从本地软件列表中显示libglib2.0-dev的详细信息
sudo apt-cache show libglib2.0-dev
- 用apt show命令从本地软件列表中显示libglib2.0-dev的详细信息
sudo apt show libglib2.0-dev
- 用显示apt-cache policy命令显示软件包libglib2.0-dev的安装状态和版本信息
sudo apt-cache policy libglib2.0-dev
安装libglib2.0-dev之前:
Installed: (none) 未安装。
安装libglib2.0-dev之后:
libglib2.0-dev:
Installed: 2.64.6-1~ubuntu20.04.6 已经安装的版本
Candidate: 2.64.6-1~ubuntu20.04.6 候选版本
Version table: 版本列表
*** 2.64.6-1~ubuntu20.04.6 500
500 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
500 http://archive.ubuntu.com/ubuntu focal-security/main amd64 Packages
100 /var/lib/dpkg/status
2.64.2-1~fakesync1 500
500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
- 用显示apt policy命令显示软件包libglib2.0-dev的安装状态和版本信息
sudo apt policy libglib2.0-dev
安装libglib2.0-dev之前:
安装libglib2.0-dev之后:
- 用apt-cache madison命令显示软件包版本列表
sudo apt-cache madison libglib2.0-dev
- 用apt list命令显示软件包版本列表
sudo apt list libglib2.0-dev
libglib2.0-dev安装之前:
libglib2.0-dev安装之后:
带–-installed选项:
sudo apt list libglib2.0-dev –installed
libglib2.0-dev安装之前:
libglib2.0-dev安装之后:
sudo apt list libglib2.0-dev --installed -a
差异摘要:apt 与 apt-get
类别 | apt-get | apt |
它是什么? | 用于在基于 Debian 的 Linux 系统上管理软件包的 CLI 工具。 | 用于在基于 Debian 的 Linux 系统上管理软件包的 CLI 工具。 |
发布年份和 Debian 的初始发行版本 | 1998 年,Debian 2.0(Hamm)发行版。 | 2014 年,Debian 8(Jessie)发行版。 |
搜索功能 | 不可以。用户必须改用 apt-cache 包管理命令进行搜索。 | 可以。 |
依赖关系解析 | 解析简单依赖关系。 | 通过安装推荐软件解析复杂依赖关系。 |
文件系统上的包版本 | 使用 apt-get upgrade 时,旧版本的软件包会保留在文件系统上。 | 使用 apt upgrade 时,旧版本的软件包会从文件系统中删除。 |
操作的打印输出 | 向用户打印每个 apt-get 命令的基本输出,没有太多细节。 | 向用户打印每个 apt 命令的详细输出,以获取有关操作的更多信息,包括任务进度条。 |
apt自己独有的命令
apt list
列出本地仓库中所有的软件包名。
如果带上包名:
apt list [package name]
可以从本地仓库中查找指定的包名,支持通配符,举例:
apt list libglib2.0-dev -a
通配符的使用:
apt list libglib2.0*
如果包名后面带有[installed]表示该包已经安装。举例:
- 列出所有已安装的包名
apt list --installed
- 列出指定已安装的包名
sudo apt list libglib2.0* --installed
安装libglib2.0-dev之前:
安装libglib2.0-dev之后:
sudo apt list libglib2.0* --installed
- 查看所有可升级的包
sudo apt list --upgradable
- 查看可升级的指定包
sudo apt list libglib2.0-dev --upgradable
apt edit-sources
快速换源。
通常换源是通过手动编辑/etc/apt/sources.list来实现的。
用apt edit-sources命令可以帮助我们选择编辑器并自动打开sources.list进行编辑。举例,换阿里云源:
- 先备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
- 执行换源命令
sudo apt edit-sources
选择编辑器。我们选1. /bin/nano
将列表中所有的archive.ubuntu都改成mirrors.aliyun,保存,退出。
- 更新源软件列表
因为源的位置变了,我们必须更新本地的源列表和当前的源一致:
sudo apt update
- 更新软件包
升级系统中所有已安装的软件包:
sudo apt upgrade
升级指定的已安装的软件包:
sudo apt upgrade libglib2.0-dev