Apt-get

**進階打包工具**（英語：**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 可以升級絕大部分滿足依賴關係的軟體，但是也可能要刪除，或添加新的軟體以滿足依賴關係。

## 前端

APT 擁有不少的前端程式：

## 範例

### 搜尋

在終端機裡輸入：

* `apt-cache search <package>`

這樣系統會列出與 <package> 名稱相匹配的套件。

### 安裝

在終端機裡輸入：

* `apt-get install <package>`

這樣系統會自動下載 <package> 以及所有的依存套件，同時進行套件的安裝。

### 移除

在終端機裡輸入：

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

這樣系統會自動移除 <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"（奶牛）之意。

## 參見

* Yum
* Debian
* Ubuntu

## 參考文獻

## 外部連結

* `apt(8)`– Debian 維護命令（Maintenance Commands）手冊頁
* APT HOWTO（頁面存檔備份，存於網際網路檔案館）
* APT-RPM 組織（頁面存檔備份，存於網際網路檔案館）