APT

高级打包工具（Advanced Packaging Tools，缩写为APT）是Debian及其衍生的Linux软件包管理器。APT可以自动下载，配置，安装二进制或者源代码格式的软件包，因此简化了Unix系统上管理软件的过程。APT最早被设计成dpkg的前端，用来处理deb格式的软件包。现在经过APT-RPM组织修改，APT已经可以安装在支援RPM的系统管理RPM套件。

## 构成

APT由以下的几个主要的命令构成：

- `apt-get`
- `apt-cache`
- `apt-file`

在Debian系统中，APT建构于dpkg之上。

## 安装源

APT的软件安装来源在Debian安装的时候即可进行初始设置，除了Debian官方的网络安装来源之外，也可以使用Debian的安装光碟，甚至可以从非官方的安装来源中下载非官方的软件。APT同时也可以从一些安装来源中下载源代码软件，并且自行编译、安装。

## 依赖关系处理

APT会从每一个安装源下载一个软件包的列表。这个列表中有这个安装源所包含的可用软件包的信息。在可能的情况下，APT会安装最新的软件包，被安装的软件包所依赖的其他软件包也会被安装，建议安装的软件包则会在屏幕中显示但是不会被安装。不过在有一些情况下APT由于依赖关系不能安装软件包，例如：这个软件包和系统中的其他软件包冲突，或者这个软件包依赖的软件包在任何安装源中均不存在或没有要求的版本。在这种情况下，APT会返回错误信息并且中止，使用者需要自行解决依赖问题。

## 软件包更新方式

Debian系统的一大特色即为“永不停机”，事实上，APT达到了这一点。在软件被升级的时候，它仍然可以继续服务。APT可以智能地从安装来源下载最新版本的软件并且安装，而无须在安装后重新启动电脑（除了更新Linux内核之外）。所有的配置都可以得到保留，升级软件不再是一个棘手的问题。

## 发行版升级

APT最使人称道的特点在于可以从一个Debian发行版升级到新的Debian发行版，例如从woody升级到sarge。APT可以升级绝大部分满足依赖关系的软件，但是也可能要删除，或添加新的软件以满足依赖关系。

## 前端

<image>

APT拥有不少的前端程序：

名称｜运行界面｜最新版本

aptitude｜字符终端｜0.2.15.9-2

Synaptic｜图形界面｜0.75.13

GNOME 软件｜图形界面｜0.4.7-1.2

兼容｜2.0.25

## 示例

### 搜索

在终端机里输入：

- `apt-cache search <package>`

这样系统会列出与名称相匹配的套件。

### 安装

在终端机里输入：

- `apt-get install <package>`

这样系统会自动下载以及所有的依存套件，同时进行套件的安装。

### 移除

在终端机里输入：

- `apt-get remove [--purge] <package>`

这样系统会自动移除以及任何依此存套件的其它套件。--purge指明套件应被完全清除。

### 升级

在终端机里输入：

- `apt-get update`

这样系统会自动由映射点更新套件列表，如果想安装最新套件，必须先运行一次。每次修改了 /etc/apt/sources.list后，也必须执行一次。

在终端机里输入：

- `apt-get upgrade [-u]`

这样系统会自动将所有已经安装在系统内的套件升级为最新版本。如果一个套件改变了依存关系，而需要安装一个新的套件时，它将不会被升级，而是标识成hold。如果某个套件被设置hold标号，就不会被升级。

在终端机里输入：

- `apt-get dist-upgrade [-u]`

和apt-get upgrade类似，dist-upgrade会安装和移除套件来满足依存关系，因此具有一定的危险性。

## 彩蛋

在终端输入apt-get -h会在末尾出现“This APT has super cow power”（本 APT 具有超级牛力。）。

在终端输入apt-get moo会在屏幕上显示一头牛，下方显示“Have you mooed today?”（您今天哞哞叫了吗？）。

```
                 (__) 
                 (oo) 
           /------\/ 
          / |    ||   
         *  /\---/\ 
            ~~   ~~   
..."Have you mooed today?"...
```

与apt-get相似的一个叫做aptitude的程序在aptitude -h的末尾加上了“This aptitude does not have Super Cow Powers.（这个aptitude没有超级牛力）”。

在后面加上moo（即输入aptitude moo），并且分别加上选项“-v”，“-vv”，“-vvv”，“-vvvv”，“-vvvvv”，“-vvvvvv”（即输入aptitude -v moo;输入aptitude -vv moo;等等），则会有如下输出：

```
 $ aptitude moo
 There are no Easter Eggs in this program.（此軟體沒有復活節彩蛋程式。）
 $ aptitude -v moo
 There really are no Easter Eggs in this program.（此軟體真的沒有復活節彩蛋程式。）
 $ aptitude -vv moo
 Didn't I already tell you that there are no Easter Eggs in this program?（我不是已經告訴你這個軟體真的沒有復活節彩蛋程式了嗎？）
 $ aptitude -vvv moo
 Stop it!（停啦！）
 $ aptitude -vvvv moo
 Okay, okay, if I give you an Easter Egg, will you go away?（好啦，好啦，如果我給你復活節彩蛋，你是不是就閃人？）
 $ aptitude -vvvvv moo
 All right, you win.（好啦，你赢了。）
                               /----\
                       -------/      \
                      /               \
                     /
  |-----------------/                  --------\
   ----------------------------------------------
 $ aptitude -vvvvvv moo
 What is it?  It's an elephant being eaten by a snake, of course.（這是什麼? 這當然是一隻大象被一隻蛇吞掉。）
```

而apt系列的另一个名为"apt-build"的软件包也具有相似的功能：

```
 $ apt-build moo
          (__)    ~
          (oo)   /
      _____\/___/
     /  /\ / /
    ~  /  * /
      / ___/
 *----/\
     /  \
    /   /
   ~    ~
 ..."Have you danced today? Discow!"...
 （意为：今天你跳舞了吗？迪斯可！）
```

软件编写者特地将Disco（迪斯可）一词改为"Discow"，以体现"Cow"（奶牛）之意。

## 基本资料

- 日语原文：高级打包工具
- 操作系统：跨平台
- 平台：Unix和类Unix操作系统
- 编程语言：C++
- 类型：软件包管理系统
- 许可协议：GNU GPL
- 网站： wiki.debian.org/Apt wiki.debian.org/Teams/Apt