Linux APT 教學:VPS 軟體包安裝與管理的必學基礎指令

完整教你 Ubuntu / Debian VPS 上 APT 套件管理指令,涵蓋安裝、更新、移除、依賴衝突修復、版本 Pinning 與 PPA 管理,讓你不再只會 apt install。

APTUbuntuDebianLinuxVPS軟體安裝套件管理系統維護教學基礎指令伺服器安全apt-getPPA依賴衝突版本鎖定

APT 幾乎是 Ubuntu / Debian 系 VPS 的基本功,但很多人只會 apt install,遇到套件版本、來源、相依性或更新卡住時就不知道怎麼辦。這篇會把 APT 最常用、最實用的操作一次整理給你。

你如果不想每次都只是照著別人的畫面一步一步跟著按,卻不知道自己到底改了什麼,這篇會比較適合你。重點不是讓你背流程,而是讓你下次遇到類似情況時,還知道該怎麼自己判斷。

你會學到什麼

  • 看懂 APT 日常安裝、更新、移除指令的差別。
  • 知道怎麼查套件資訊與版本。
  • 遇到依賴衝突、安裝失敗時,有完整排查與修復方向。
  • 理解 apt 與 apt-get 的差異,選對工具用在對的場合。
  • 學會版本鎖定(Pinning)與 PPA 管理。

什麼情況最適合先看這篇

  • 第一次自己管理 Linux 主機,想把操作做穩而不是只會貼指令的人
  • 你現在正要處理「Linux APT」這類操作
  • 你希望做完之後不只功能能用,連驗證與排錯也有概念

開始前先確認

  • 確認你的系統是 Ubuntu 或 Debian 系。
  • 登入有 sudo 權限的帳號。
  • 重要正式環境先避開尖峰時段更新。

先提醒你一件事

VPS 最怕的不是不會下指令,而是你不知道指令會影響到哪個服務、哪個設定檔、哪個對外連線。

詳細教學與操作步驟

本文將教你如何使用 APT (Advanced Package Tool),這是 Ubuntu 與 Debian 系統上最強大且最常用的軟體包管理工具,幫助你輕鬆安裝、更新與移除伺服器上的程式。

為什麼 APT 是 VPS 新手的必修課?

在 Linux 伺服器中,你不會像 Windows 一樣下載 .exe 檔案來安裝程式。大部分的軟體都存放在雲端的「軟體庫 (Repository)」中。APT 就像是 Linux 版的 App Store,只要簡單的一行指令,就能自動幫你下載、安裝並解決所有相依性問題。在侃瑞科技的 VPS 伺服器 中,你可以隨意使用這些指令來建構你的理想環境。

apt 與 apt-get 到底差在哪裡?

你一定在教學文中看過這兩種寫法交替出現。簡單說:

  • apt 是比較新的前端介面,整合了 apt-getapt-cacheapt-mark 等多個工具的常用功能,輸出也比較好看(有進度條),適合日常互動操作。
  • apt-get 是底層工具,行為更穩定、輸出格式更一致,適合寫在自動化腳本(shell script、cron job)中。

實務建議:在 SSH 手動操作時用 apt,寫腳本自動化時用 apt-get。功能上兩者幾乎完全對應,不需要刻意只學一邊。

操作aptapt-get / apt-cache
更新清單apt updateapt-get update
升級套件apt upgradeapt-get upgrade
安裝apt install pkgapt-get install pkg
移除apt remove pkgapt-get remove pkg
搜尋apt search keywordapt-cache search keyword
查看套件資訊apt show pkgapt-cache show pkg
列出可升級apt list --upgradable(無直接對應)

最常用的 APT 指令

  1. 更新軟體清單: sudo apt update(這不會更新軟體,只是更新「有哪些軟體可以下載」的清單)。
  2. 升級所有已安裝軟體: sudo apt upgrade -y(這才是真正的更新版本動作)。
  3. 完整升級(含相依性變更): sudo apt full-upgrade -y(會自動移除不再需要的舊依賴,適合大版本更新)。
  4. 安裝新程式: sudo apt install 套件名稱 -y(例如安裝文字編輯器:sudo apt install vim -y)。
  5. 移除程式: sudo apt remove 套件名稱
  6. 完全清除程式與其設定: sudo apt purge 套件名稱
  7. 搜尋套件: apt search 關鍵字
  8. 查看套件詳細資訊: apt show 套件名稱

查看套件版本與來源

安裝前想知道可用的版本:

# 查看某套件所有可用版本與來源優先度
apt policy nginx

# 查看已安裝套件的版本
dpkg -l | grep nginx

# 安裝指定版本
sudo apt install nginx=1.24.0-1ubuntu1

apt policy 輸出中的數字越大代表優先度越高,系統會優先安裝該來源的版本。

系統清理與空間回收

隨著安裝與更新的次數增加,伺服器中會累積許多不再需要的舊檔案。你可以定期執行以下指令來釋放硬碟空間:

  • 自動移除不再需要的相依套件: sudo apt autoremove
  • 清除已下載的安裝檔緩存: sudo apt clean
  • 只清除過期的緩存(保留最新版本): sudo apt autoclean

建議把清理指令加入 cron 排程,例如每週日凌晨自動執行:

# 編輯 crontab
crontab -e

# 加入以下行
0 4 * * 0 sudo apt autoremove -y && sudo apt autoclean

依賴衝突處理

這是 APT 使用者最常卡住的問題。當你看到類似 The following packages have unmet dependencies 的錯誤時,不要慌。

情境一:安裝時遇到依賴不滿足

# 第一步:嘗試修復中斷的安裝
sudo apt --fix-broken install

# 第二步:如果還是不行,更新清單後重試
sudo apt update
sudo apt --fix-broken install

情境二:套件版本互相衝突

# 查看哪些套件互相衝突
apt depends 套件名稱
apt rdepends 套件名稱

# 模擬安裝(不會真的裝),看看會發生什麼
apt install -s 套件名稱

# 強制指定版本解決衝突
sudo apt install libfoo=1.2.3-1 libbar=2.0.0-1

情境三:dpkg 被中斷

有時候安裝到一半斷線或系統出狀況,dpkg 的狀態會壞掉:

# 重新設定所有未完成的套件
sudo dpkg --configure -a

# 然後再修復
sudo apt --fix-broken install

情境四:鎖定檔佔用

如果看到 Could not get lock /var/lib/dpkg/lock-frontend

# 先確認是否有其他 apt 進程在跑
ps aux | grep -i apt

# 如果確認沒有(例如是上次中斷殘留),才手動清除
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/apt/lists/lock
sudo dpkg --configure -a

版本鎖定(Pinning)

有時候你需要某個套件停在特定版本,例如你的應用只相容 PHP 8.1,不想被自動升級到 8.3。

方法一:用 apt-mark hold

# 鎖定套件版本
sudo apt-mark hold php8.1-fpm

# 查看所有被鎖定的套件
apt-mark showhold

# 解除鎖定
sudo apt-mark unhold php8.1-fpm

方法二:用 APT Preferences(進階 Pinning)

建立 /etc/apt/preferences.d/pin-php 檔案:

Package: php8.1*
Pin: version 8.1.*
Pin-Priority: 1001

Pin-Priority 說明:

  • 1001+:強制安裝此版本,即使降級也會執行
  • 990:預設安裝的版本優先度
  • 500:一般正式倉庫的預設值
  • 100:已安裝套件的預設值
  • -1:永不安裝此版本

管理第三方軟體源 (PPA)

有時候官方軟體庫的版本太舊,你需要使用 PPA。但 PPA 不能亂加,否則版本衝突很難排。

新增 PPA

# 例如安裝最新的 PHP 版本
sudo add-apt-repository ppa:ondrej/php
sudo apt update

查看目前系統所有軟體源

# 列出所有啟用的來源
grep -r "^deb " /etc/apt/sources.list /etc/apt/sources.list.d/

# 或者用 apt 的方式
apt policy

移除 PPA

# 移除 PPA(同時會還原該 PPA 安裝的套件版本)
sudo add-apt-repository --remove ppa:ondrej/php
sudo apt update

**安全性考量:**每個 PPA 都是由第三方維護者提供的,加入前先確認維護者的信譽。正式環境不建議使用來路不明的 PPA,優先選擇官方維護或知名開源社群的來源。

進階:Unattended Upgrades 自動安全更新

正式環境建議啟用安全更新自動安裝,這樣就算你忘了手動更新,重大漏洞修補也不會漏掉:

# 安裝自動更新套件
sudo apt install unattended-upgrades -y

# 啟用自動安全更新
sudo dpkg-reconfigure -plow unattended-upgrades

設定檔在 /etc/apt/apt.conf.d/50unattended-upgrades,你可以調整:

// 只允許安全更新(預設行為)
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};

// 自動清理舊核心
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";

// 自動移除不需要的依賴
Unattended-Upgrade::Remove-Unused-Dependencies "true";

// 需要重開機時自動重開(視需求開啟)
// Unattended-Upgrade::Automatic-Reboot "true";
// Unattended-Upgrade::Automatic-Reboot-Time "04:00";

檢查自動更新是否正常運作:

# 模擬執行
sudo unattended-upgrades --dry-run --debug

# 查看更新紀錄
cat /var/log/unattended-upgrades/unattended-upgrades.log

常見問題

Q:執行 apt 時出現 "Could not get lock" 錯誤? 這通常是因為系統背景正在自動檢查更新,或者是你有另一個終端機正在執行 apt 指令。先用 ps aux | grep apt 檢查,如果確認沒有其他進程,才手動刪除 lock 檔。更多 Linux 基礎操作可參考我們的 VPS 快速入門指南

Q:如果不小心刪錯重要的系統套件怎麼辦? 這非常危險。建議在進行重大操作前,先利用我們 VPS 的 自動備份功能 建立一個還原點,這樣即使系統掛掉也能快速救回。

Q:apt update 出現 GPG 金鑰錯誤? 這代表某個軟體源的簽名金鑰過期或遺失。解法是重新匯入金鑰:

# 查看是哪個來源出問題
sudo apt update 2>&1 | grep "NO_PUBKEY"

# 匯入遺失的金鑰(替換 KEY_ID)
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_ID

Q:upgrade 和 full-upgrade 差在哪? upgrade 只會更新已安裝的套件,不會移除任何東西。full-upgrade 會處理依賴關係的變更,可能會移除不再需要的舊套件或安裝新依賴。一般日常用 upgrade,大版本更新時用 full-upgrade

Q:怎麼知道哪些套件有安全更新?

# 列出所有可升級的套件
apt list --upgradable

# 只看安全更新(需要 unattended-upgrades)
sudo unattended-upgrades --dry-run 2>&1 | grep "Packages"

做完後怎麼確認自己真的有設對

  • 安裝完套件後,用 dpkg -l | grep 套件名 確認版本正確。
  • systemctl status 服務名 確認新安裝的服務確實有啟動。
  • 重新登入後再跑一次 apt update,確認沒有殘留的錯誤訊息。
  • 如果改了軟體源或 Pinning,用 apt policy 套件名 確認優先度符合預期。

這一題最常踩的坑

  • 看到更新就全部直接升,沒有先看會不會影響服務。
  • 混用太多第三方來源,後面版本衝突很難排。
  • 套件裝完不確認服務是否真的起來。
  • 遇到依賴衝突就直接 --force 硬裝,結果把系統搞壞。
  • 在腳本裡用 apt 而不是 apt-get,偶爾會出現非預期行為。

如果你要往下一步走

如果你準備部署應用,做完 APT 基礎後很適合接著看 Docker 安裝教學Nginx 與 PHP 教學。想了解更多系統管理操作,可以參考 Linux 基本系統管理指令教學。如果你準備開始自己架服務,可以直接對照侃瑞的 VPS 方案與價格 選環境。

需要主機來實作?

侃瑞科技提供 cPanel 虛擬主機與 VPS,教學裡的操作開箱即用。

查看方案 →
LINE 諮詢