# 基础软件包管理操作

在 deepin 系统中有许多基于 APT 的软件包管理工具可以在 Debian 系统上进行基于仓库的软件包管理操作。在这里，我们将介绍 3 种基本的软件包管理工具：apt,apt-get / apt-cache 和 aptitude以及一个包文件查询工具：apt-file 。

对于涉及软件包安装或更新软件包元数据的软件包管理操作，你必须有 root 权限。

## `apt` vs. `apt-get` / `apt-cache` vs. `aptitude`

尽管 `aptitude` 是作者主要使用的一个非常好的可互动工具，但不建议使用其进行跨版本升级。

apt-get 和 apt-cache 是最基础 的基于 APT 的软件包管理工具。

- apt-get 和 apt-cache 只提供命令行用户界面。

- apt-get 是进行跨版本的主系统升级等操作的最合适工具。

- apt-get 提供了一个强大的软件包依赖解析器。

- apt-get 对硬件资源的要求不高。它消耗更少的内存并且运行速度更快。

- apt-cache 提供了一个 标准的正则表达式来搜索软件包名称和描述。

- apt-get 和 apt-cache 可以使用 /etc/apt/preferences 来管理软件包的多个版本，但这非常繁琐。

apt 命令是一个用于软件包管理的高级命令行界面。它基本上是 apt-get、apt-cache 和类似命令的一个封装，被设计为针对终端用户交互的界面，它默认启用了某些适合交互式使用的选项。

- apt 工具在用户使用 apt install 安装软件包时提供了一个友好的进度条。

- 在成功安装下载的软件包后，apt 将默认删除缓存的 .deb 软件包。

建议用户使用新的 apt(8) 命令用于 交互式的使用场景，而在 shell 脚本中使用 apt-get(8) 和apt-cache(8) 命令。

aptitude 命令是最通用的基于 APT 的软件包管理工具。

- aptitude 提供了一个全屏的交互式文本用户界面。

- aptitude 同样也提供了一个命令用户界面。

- aptitude 是用于日常软件包管理（例如检查已安装的软件包和搜索可用的软件包）的最合适工具。

- aptitude 对硬件资源的要求更高。它消耗更多的内存并且运行速度更慢。

- aptitude 提供一个增强的正则表达式来搜索所有的软件包元数据。

- aptitude 可以管理软件包的多个版本，并且不使用 /etc/apt/preferences，这会十分直观。

## 命令行中的基础软件包管理操作

下面是使用 `apt`(8), `aptitude`(8) 和 `apt-get`(8) / `apt-cache`(8) 的命令行基本软件包管理操作。

|apt 语法|aptitude 语法|apt-get / apt-cache 语法|说明|
|-|-|-|-|
|apt update|aptitude update|apt-get update|更新软件包档案库元数据|
|apt install foo|aptitude install foo|apt-get install foo|安装 “foo” 软件包的候选版本以及它的依赖|
|apt upgrade|aptitude safe-upgrade|apt-get upgrade|安装已安装的软件包的候选版本并且不移除任何其它的软件包|
|apt full-upgrade|aptitude full-upgrade|apt-get dist-upgrade|安装已安装的软件包的候选版本，并且需要的话会移除其它的软件包|
|apt remove foo|aptitude remove foo|apt-get remove foo|移除 “foo” 软件包，但留下配置文件|
|apt autoremove|N/A|apt-get autoremove|移除不再需要的自动安装的软件包|
|apt purge foo|aptitude purge foo|apt-get purge foo|清除 “foo” 软件包的配置文件|
|apt clean|aptitude clean|apt-get clean|完全清除本地仓库的软件包检索文件|
|apt autoclean|aptitude autoclean|apt-get autoclean|清除本地仓库中过时软件包的软件包检索文件|
|apt show foo|aptitude show foo|apt-cache show foo|显示 “foo” 软件包的详细信息|
|apt search 正则表达式|aptitude search regex|apt-cache search regex|搜索匹配 regex 的软件包|
|N/A|aptitude why regex|N/A|解释匹配 regex 的软件包必须被安装的原因|
|N/A|aptitude why-not regex|N/A|解释匹配 regex 的软件包不必安装的原因|
|N/A|aptitude search '~i!~M'|apt-mark showmanual|列出手动安装的软件包|

不建议使用apt autoremove,因为这会损害到某些打包不规范的包。

`apt` / `apt-get` 和 `aptitude` 能够混用，没有大问题。

“`aptitude why regex`” 可以通过 “`aptitude -v why regex`” 列出更多的信息。类似的信息可以通过"`apt rdepends package`" 或 “`apt-cache rdepends package`” 获取。

当 `aptitude` 命令在命令行模式下启动后遇到了一些问题（例如软件包冲突），你可以在之后的提示中按下 “`e`” 键切换到全屏的交互模式。

你可以在 “`aptitude`” 后面使用的命令选项。

|命令选项|说明|
|-|-|
|-s|模拟命令的结果|
|-d|仅下载，不进行安装/更新|
|-D|在自动安装和删除前，显示简要的说明|

更多内容参见 `aptitude`(8) 和位于 “`/usr/share/doc/aptitude/README`” 的 “aptitude 用户手册”。

## aptitude 的交互式使用

此处不会详细解释其使用方式，详见deepin wiki 以及 Debian对其介绍

aptitude按键绑定：

|快捷键|键绑定功能|
|-|-|
|F10 或 Ctrl-t|菜单|
|?|显示按键帮助（更加完整的清单）|
|F10 → 帮助 → 用户手册|显示用户手册|
|u|更新软件包档案库信息|
|+|标记该软件包以便升级或安装|
|-|标记该软件包以便移除（保留配置文件）|
|_|标记该软件包以便清除（移除配置文件）|
|=|将软件包设为保持状态|
|U|标记所有可升级包（动作如同 full-upgrade）|
|g|开始 下载 并 安装 所选择包|
|q|退出该界面并保存变更|
|x|退出该界面并清除变更|
|Enter|查看软件包的信息|
|C|查看软件包的变更记录|
|l|变更软件包的显示限制|
|/|搜寻匹配的第一个软件包|
|\|重复上一个搜索|
