Ubuntu/Debian apt 套件安裝與管理
在 Ubuntu 或 Debian 系統中,我們主要使用 apt (Advanced Package Tool) 來管理軟體。
它就像是 Linux 的 App Store,只是是用指令操作的。
apt-get。現在推薦直接使用 apt 即可,它是 apt-get 和 apt-cache 的現代化簡化版,介面更人性化(例如會有進度條)。必備指令
所有安裝、移除的操作都需要 sudo 權限。
1. 更新套件清單 (Update)
這是最重要的第一步! 這個指令 不會 更新軟體本身,它只是去網路上的伺服器(Repository)下載最新的「軟體清單目錄」。 這樣系統才知道現在有哪些軟體可以裝、最新版是幾號。
sudo apt update
建議每次要安裝軟體前,都先跑一次這個。
2. 升級已安裝的套件 (Upgrade)
這個指令才會真正把它下載回來並安裝更新。
sudo apt upgrade
upgrade 會升級系統中「所有」有新版本的套件。如果你只想升級「特定一個」軟體,請參考下方的進階操作。3. 安裝軟體 (Install)
想裝什麼,直接打名字。例如安裝 Nginx 網頁伺服器:
sudo apt install nginx
4. 移除軟體 (Remove)
sudo apt remove nginx
remove 雖然會把程式刪掉,但通常會保留「設定檔」(/etc/ 裡面的東西),以防你以後重裝時能保留設定。5. 徹底移除 (Purge)
如果你想把程式連同設定檔全部清乾淨:
sudo apt purge nginx
6. 搜尋軟體 (Search)
如果你不確定軟體的正確名稱:
apt search mysql
自動清理 (Autoremove)
當你安裝一個軟體(如 A)時,A 可能依賴 B 和 C。系統會自動幫你裝 B 和 C。 但當你移除 A 之後,B 和 C 可能就沒用了。
使用 autoremove 可以自動幫你清除這些不再被需要的依賴套件,釋放磁碟空間。
sudo apt autoremove
進階操作技巧
1. 只升級單一特定套件
如果你不想執行全系統升級 (apt upgrade),只想更新某個特定的軟體(例如 nginx),可以使用 install 指令搭配 --only-upgrade 參數:
# 只升級 Nginx,不升級其他軟體
sudo apt install --only-upgrade nginx
2. 查詢可升級的套件
想知道執行 apt upgrade 會有那些軟體被更新嗎?
apt list --upgradable
3. 檢視套件詳細資訊
想查看某個軟體的版本、依賴關係、安裝大小或描述:
apt show nginx
4. 列出已安裝的套件
列出系統中所有已安裝的軟體(可以用 grep 過濾):
apt list --installed | grep nginx
5. 清理下載的安裝檔快取 (Clean)
apt 在安裝軟體時,會先把 .deb 安裝檔下載到 /var/cache/apt/archives/。久而久之這會佔用大量硬碟空間。
你可以使用以下指令來清理這些暫存檔:
sudo apt clean
鎖定與解鎖套件版本 (apt-mark)
有時候我們不希望某個軟體(例如 Kubernetes 的 kubelet 或特定版本的 docker)在執行 apt upgrade 時被自動升級,以免版本不相容導致服務中斷。這時可以使用 apt-mark 來「鎖定」版本。
1. 鎖定版本 (Hold)
# 鎖定 nginx 不被自動更新
sudo apt-mark hold nginx
鎖定後,即使執行 sudo apt upgrade,系統也會跳過這個軟體。
2. 解除鎖定 (Unhold)
當你準備好要升級時,記得先解鎖:
sudo apt-mark unhold nginx
3. 查看已鎖定的套件
apt-mark showhold
常見問題與技巧
1. 如何安裝本機的 .deb 檔案?
有時候軟體商只提供 .deb 檔案下載(如 Google Chrome 或 VS Code)。
以前我們用 dpkg -i,但現在 推薦直接用 apt 安裝,因為它會自動幫你解決依賴問題:
# 注意路徑,必須有 ./ 開頭,或是絕對路徑
sudo apt install ./google-chrome-stable_current_amd64.deb
2. 找不到指令在哪個套件? (apt-file)
如果你想用 ifconfig 但系統說找不到,你又不知道要裝哪個套件(其實是 net-tools),可以使用 apt-file。
首先安裝並更新資料庫:
sudo apt install apt-file
sudo apt-file update
然後搜尋檔案名稱:
apt-file search ifconfig
# 輸出:net-tools: /sbin/ifconfig
3. 查詢安裝歷史紀錄
忘記自己上週裝了什麼?可以查看 log:
tail -f /var/log/apt/history.log
管理軟體源 (Repositories & PPA)
有時候官方預設的軟體源 (Repository) 版本太舊,或是沒有我們想要的軟體。 這時我們需要加入第三方的軟體源,最常見的就是 PPA (Personal Package Archive)。
1. 加入 PPA (add-apt-repository)
例如安裝最新版的 Python 或 Ansible:
# 安裝 software-properties-common 以支援 add-apt-repository
sudo apt install software-properties-common
# 加入 PPA
sudo add-apt-repository ppa:ansible/ansible
# 加入後,apt 會自動 update,接著就能安裝了
sudo apt install ansible
2. 移除 PPA
sudo add-apt-repository --remove ppa:ansible/ansible
3. 軟體源設定檔位置
所有的下載來源都定義在:
- 主設定檔:
/etc/apt/sources.list - 額外設定目錄:
/etc/apt/sources.list.d/(推薦將第三方源放在這裡,便於管理)
故障排除 (Troubleshooting)
1. 修復損毀的依賴關係 (Fix Broken)
有時候安裝到一半斷網,或是依賴關係打結導致無法安裝新軟體。
這時可以用 --fix-broken (或 -f) 神奇指令來修復:
sudo apt --fix-broken install
2. 資料庫鎖定 (Lock)
如果是出現 Could not get lock /var/lib/dpkg/lock-frontend 錯誤,通常是因為:
- 有另一個 apt process 正在跑(例如背景自動更新)。
- 上一次更新意外中斷,導致 lock file 沒被釋放。
解決方法:先檢查有沒有 process 在跑:
ps aux | grep apt
如果確定沒有,可以手動刪除 lock file (小心使用):
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock
然後執行 sudo dpkg --configure -a 修復資料庫。
實用參數小技巧
1. 模擬執行 (Dry Run)
不確定執行下去會發生什麼事(會不會刪掉重要套件?)
加上 -s (Simulate) 參數,它只會「告訴你」會發生什麼,而不會真的做:
apt remove -s mysql-server
2. 自動回答 Yes (-y)
寫腳本 (Dockerfile, Shell Script) 時必備,避免 apt 停下來問你 [Y/n]:
sudo apt install -y nginx
3. 只下載不安裝
如果你想把 .deb 檔抓下來帶去沒有網路的電腦安裝:
apt download nginx