2018-04-18

Ubuntu套件管理系統 (Package Management System) - Ubuntu Software, Synaptic, apt, dpkg

本篇將簡介 Ubuntu 套件管理系統(Package Management System)的概念,並介紹 Ubuntu 最重要的套件管理系統:Ubuntu Software, Synaptic, apt, dpkg 的安裝和使用…



Ubuntu 套件管理系統 (Package Management System) 是什麼?
我們使用電腦,其實是在使用電腦上的各種軟體來幫我們解決問題。Ubuntu 作為一個優秀的作業系統,提供了非常豐富且免費的軟體,被稱為套件(Package)。我們可以將 Ubuntu 套件管理系統想像成,Ubuntu 把各式各樣的套件(軟體)都收集和整理到一個很大的倉庫裡(套件庫 Repositories),這個倉庫裡的套件任何使用 Ubuntu 的人都可以取用。但這麼大的倉庫要怎麼找到您要用的套件?以及怎麼知道那些套件我們已經安裝了,那些還沒?就需要有良好的分類和管理。而且有些套件,因為會使用到其他的套件,因此必須先安裝好別的套件才能正常安裝(這稱為:套件相依性 Dependencies)。那要怎麼知道套件相依的問題並正確的完成安裝呢?就必須靠設計良好的套件管理工具 - Ubuntu 套件管理系統 (Package Management System)。
接下來要介紹的即是 Ubuntu 上最重要也最常使用的套件管理系統(工具)。

Ubuntu Software
Ubuntu Software 是 Ubuntu 最基本,通常也是已安裝好的圖形化套件管理工具,它有點像是手機上的Play商店或App Store,可以很方便的檢視安裝了那些軟體?是否需要更新?也可以移除或安裝新的軟體。
Ubuntu Software 的啟動圖示就位在桌面左邊的工具列上(Ubuntu稱之為dash浮動面板,不過工具列這個名字好像比較順口),那個像公事包的就是了。
點它一下就會開啟Ubuntu Software視窗,而且工具列的按鈕旁還會出現一個紅點點,提醒你開啟了一個Ubuntu Software視窗。視窗上方有 [All]、[Installed]、[Updates] 三個頁籤。
[All] 頁籤會顯示可取得的套件(軟體),並將套件分類讓使用者挑選,點某個套件還可以看到該套件的介紹,以及執行安裝。下圖就是 [All] 頁籤的畫面,是不是跟Play商店有點像。
按一下分類下方,中間的小三角形,會顯示更多的分類。Ubuntu提供非常多的套件,您可以放心安裝使用,在Ubuntu Software中提供的套件(軟體)都是免費軟體,而且由Ubuntu社群確認過。
[Installed] 頁籤會顯示您的 Ubuntu 系統中已安裝的套件,可以看到該套件的說明和佔用磁碟空間大小,也可以在這裡進行移除。
[Updates] 頁籤則會顯示是否有已安裝套件的更新可以下載。

安裝 Synaptic
Synaptic 也是 Ubuntu 提供的圖形化套件管理系統 (graphical front-end package management system),它的功能比 Ubuntu Software 更強大。我們可以透過 Ubuntu Software 安裝 Synaptic。
1. 開啟Ubuntu Software --> 按右上角的[放大鏡] --> 出現[搜尋列]。
2. [搜尋列]輸入 synaptic --> 出現[Synaptic Package Manager]套件圖示。
3. 點[Synaptic Package Manager]套件圖示 --> 進入說明畫面,點[Install]按鈕安裝。
4. 安裝完成出現[Launch]按鈕 --> 按下[Launch]按鈕,會發現無法開啟Synaptic。
5. [Ctrl + Alt + t]開啟Terminal --> 輸入下列命令 --> Enter執行。
xhost +si:localuser:root
6. 再按下[Launch]按鈕,就可以開啟Synaptic了。到[Help] --> [About]看版本資訊。
7. 把Synaptic釘在工具列上吧。

Synaptic使用
1. Synaptic 中的套件就更多更完整了,左手邊這欄是套件(軟體)的分類,像Databases這個分類裡就包含了Mysql, Postgresql等資料庫套件。
2. 按下[Status]按鈕,也可看到[Installed]已安裝的套件分類。
3. 還可以檢視已安裝套件的詳細資訊,包含目前版本、更新版本、套件大小、安裝位置等資訊。[選擇套件] --> [Properties]按鈕 --> 出現[Properties]對話框。
4. 您可以看一下 Synaptic官方說明文件 - SynapticHowto,這是相當完整且詳細的 Synaptic 教學說明,包含以下主題:
  • 基本操作
  • 套件庫管理 (Repositories)
  • 安裝/移除套件
  • 更新套件
  • 更新系統及核心 (Kernel)
  • 問題排除 (Troubleshooting)

apt-get 和 dpkg
在 Ubuntu 上安裝/移除套件(軟體)不僅可以透過 Ubuntu Software 和 Synaptic 這兩個圖形化套件管理系統,還可以使用指令安裝以及下載安裝檔 (apt-get 和 dpkg) 的方式。這麼多種方式,有時會讓初次接觸 Ubuntu 的人在使用 Ubuntu 套件管理時,覺得很複雜且讓人困惑。本篇介紹的4種方式,每一種都可以,您可以自己偏好的方式來使用。只要能找到您要用的套件,不需特別糾結用什麼方式安裝。
但若您想弄清楚這些方式間的差異,可以參考以下 Ubuntu 提供的官方說明文件:
這些文件將可以讓您了解下列主題:
  • Ubuntu(Linux系統)的套件管理概念
  • 安裝/移除套件的各種方式:圖形介面、指令介面、安裝檔下載、編譯原始碼安裝
  • 命令列套件管理工具:apt-get 和 dpkg
  • apt-get 和 dpkg 的差異

常用的 apt-get 指令
apt-get 和 dpkg 可說是 Ubuntu 最重要也最主要的套件管理工具了,他的指令非常多,以下介紹幾個比較常用的指令:
1. 更新套件庫清單:這個指令會到套件庫伺服器下載最新的套件清單到我們的 Ubuntu套件管理系統中。
sudo apt update
sudo apt-get update   # 這兩個指令任一個都可以
2. 對所有套件進行更新:這個指令會根據上一個 apt update 指令更新套件庫清單的結果將所有有更新版本的套件進行更新。
sudo apt upgrade
sudo apt-get upgrade   # 這兩個指令任一個都可以
3. 對所有套件進行更新並檢查套件相依性:這個指令不但會更新套件,還會檢查套件相依衝突,將可能發生衝突的相依套件也一併更新或移除。apt dist-upgrade 有點像是 apt upgrade 的強化版,但因為它會主動將可能發生衝突的相依套件也一併更新或移除,通常被視為會有風險,並不表示它一定比 apt upgrade 指令好 (apt upgrade 若發現更新套件會產生套件相依衝突,該套件就不會被更新)。
sudo apt dist-upgrade
sudo apt-get dist-upgrade   # 這兩個指令任一個都可以
前3個指令在我們安裝套件前通常會先執行,以更新套件管理系統,所以常被組合起來使用 (apt upgrade / apt dist-upgrade 二擇一即可):
sudo apt update && sudo apt upgrade    # apt-get 也可以這樣組合
4. 安裝套件:更新完後,就可以用套件名稱進行安裝,若要安裝多個套件,還可以直接用空格隔開,寫成一句。
sudo apt install <package1_name> <package2_name> <package3_name>   # apt-get 指令也相同
為壓縮檔管理員添加解 7z、rar 功能當作練習:
sudo apt install p7zip-full p7zip-rar   # apt-get 指令也相同
5. 檢查並修復套件:這個指令也很常用到,通常是在安裝某個套件時,Ubuntu發現套件有問題,會提醒您執行這個指令進行修復,不用沒事就執行它。
sudo apt -f install   # apt-get 指令也相同
6. 移除套件:移除/解除安裝。
sudo apt remove <package_name>   # apt-get 指令也相同
purge 是清除的意思,如果 remove 時加上 purge 這個參數,會把這個套件相關的設定檔全部清乾淨,徹底移除。
sudo apt remove --purge <package_name>   # apt-get 指令也相同
Ubuntu 17,18 工具列最下方有預設安裝 Amazon 連結圖示,點了會開啟 Amazon 網站,如果不想看到它,就可以 remove 指令,讓它永遠消失。
sudo apt remove --purge ubuntu-web-launchers
7. 自動移除已不需使用,因為套件相依性而安裝的套件:這個指令常在執行完 apt remove 後使用。
sudo apt autoremove   # apt-get 指令也相同
8. 清除不需要的套件檔:將不需要、版本比較舊的套件安裝檔清除掉,節省磁碟空間。
sudo apt autoclean   # apt-get 指令也相同
9. 清除所有的套件檔:將所有的套件安裝檔都清除掉,不管是否有需要。所以下次執行 upgrade 時就可能要重新下載,會花比較多的時間。
sudo apt clean   # apt-get 指令也相同

常用的 dpkg 指令
1. 安裝 .deb套件:需先下載第三方提供的 .deb套件檔安裝套件,而非透過套件庫 (Repositories)。
sudo dpkg -i package_name.deb   # apt, apt-get沒有相對的指令
dpkg -i 這個指令常搭配 apt -f install 一起使用以補齊相依套件完成完整的安裝。
sudo dpkg -i <file>.deb   # 安裝 visual studio code .deb套件檔
sudo apt -f install       # 以apt安裝需要的相依套件
我們來安裝 Google Chrome 當練習:
第1步. 下載 Google Chrome 套件
(1) 到 Google Chrome 下載 google-chrome-stable_current_amd64.deb
(2) 或執行下列命令取得 .deb 檔
sudo wget -c https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
第2步. 安裝
(1) 執行下列命令安裝 .deb 檔
sudo dpkg -i google-chrome-stable_current_amd64.deb
(2) 或擊點下載好的 google-chrome-stable_current_amd64.deb 檔以 Ubuntu Software 執行安裝。
第3步. 若安裝有出現錯誤訊息則執行以下命令,補上相依檔案
sudo apt-get -f install
第4步. 移除下載的套件包,Chrome 就安裝好了
rm -f google-chrome-stable_current_amd64.deb
2. 查詢系統中已安裝的套件:以下兩個指令都可以使用。
dpkg -l                             # 查詢結果包含套件版本和說明,內容較完整
dpkg --get-selections               # 查詢結果只有套件名
dpkg -l | grep ibus                 # 結合擷取資料,只列出有 ibus 字串的套件
dpkg --get-selections | grep ibus   # 結合擷取資料,只列出有 ibus 字串的套件
3. 查詢已安裝套件包含的檔案:
dpkg -L package_name   # 查詢已安裝套件 package_name 包含的檔案
4. 移除 .deb套件:
sudo dpkg -r package_name

apt / apt-get 的差異
在網路上搜尋 Ubuntu(Linux系統)的安裝指令時,會看到 apt 和 apt-get 兩種指令都有人使用,兩者有何不同呢?
Ubuntu 16.04 發行版便引入了 apt,可以把 apt 看成是 apt-get 和 apt-cache 指令的子集合,兩者非常接近,但不是完全相同,不過本篇前述介紹的 apt 指令都可以用 apt-get 替代,操作時可以優先使用 apt。兩者差異的詳細說明請見下方參考資料 (References)中所附的文件。
介紹到這您有沒有覺得Ubuntu(Linux系統)的設計概念真的很不錯,而且 Ubuntu 官方說明文件都製作得非常完整,讓您可以很方便的取得和學習。

參考資料 (References):
😺 Ubuntu Officical Documentation - SynapticHowto
😺 Ubuntu正體中文Wiki - 新增、移除與更新應用程式
😺 Ubuntu Officical Documentation - InstallingSoftware
😺 Ubuntu Officical Documentation - AptGet/Howto
😺 Ubuntu Officical Documentation - dpkg
😺 What is the difference between dpkg and aptitude/apt-get?
😺 Linux中apt与apt-get命令的区别与解释
😺 Difference Between apt and apt-get Explained