Snap是什麼呢?這是Linux系統的一種軟體打包格式兼套件管理系統,由Ubuntu背後的公司Canonical推動。

Snap管理系統是為了解決在不同Linux發行版安裝軟體的問題,將軟體需要的依賴套件都包在一起,稱作爲Snap。程式啓動的時候會自我掛載一個SquashFS映像檔,再執行裡面的二進位檔。
透過Snap,即可保證每個Linux發行版都到安裝一致的軟體版本。甚至在舊版本的Ubuntu LTS系統也可以用Snap安裝到最新版軟體,而不需要升級整個系統,弄壞系統套件依賴。
不知道有什麼Snap軟體好裝?你可以先在Snapcraft瀏覽編輯精選的好用軟體。Snap除了用來裝圖形應用程式之外,也有很多純文字工具提供Snap版本,方便於伺服器環境使用。Snap本身有一套沙盒的權限系統,可進一步增強系統安全性。
本文介紹Snapd與Snap的用法。
1. 安裝Snapd #
Snap軟體依賴「Snapd」來管理套件,Snapd本身是自由軟體。目前內建Snapd的Linux發行版有:Ubuntu(含Kubuntu、Xubuntu、Lubuntu等官方衍生版)、Ubuntu Core、Ubuntu touch、Zorin OS、Manjaro、openSUSE等等。如果你使用這些發行版就不用手動安裝snapd了。
- 沒內建Snapd的Linux發行版要自行安裝。Snapd僅支援使用Systemd的Linux發行版,所以Alpine Linux和MX Linux預設無法裝Snapd。
Gentoo從官方軟體庫編譯Snapd
Arch Linux透過AUR安裝Snapd
Fedora從DNF安裝。注意:Snapd使用AppArmor管控程式權限,可能與SELinux不相容。
-
如果你的Linux系統沒有任何安全機制,建議安裝AppArmor用於管理Snap權限,增強安全性。
-
在安裝好Snap後,記得設定Snapd開機自動啓動服務
sudo systemctl enable snapd.apparmor.service
sudo systemctl enable snapd.socket- 重開機後便可以開始安裝Snap軟體了。
2. 如何安裝Snap軟體 #
在安裝Snapd後,推薦安裝Snap Store(又稱App Center,應用中心),方便以圖形化方式安裝軟體。Ubuntu已經內建了所以不用裝。

- 使用此指令從Snap套件庫安裝Snap Store:
sudo snap install snap-store-
目前Snap Store是由Canonical經營,上面的有許多開發者親自發布的軟體(綠勾勾)。Snap Store的軟體也可以在SnapCraft網頁找到。

-
在軟體安裝頁面,點「頻道」可以讓你選擇要裝穩定版(stable)還是測試版(beta)的軟體

3. Snap常用指令 #
如果你覺得從Snap Store點選太慢,不妨使用指令管理更新。
- 列出目前已安裝的Snap軟體:
sudo snap list- 更新全部的Snap軟體:
sudo snap refresh- Snap預設會自動在背景下載軟體更新,如果要停用自動更新,使用
--hold和--unhold引數開關自動更新:
# 停用全域自動更新
sudo snap refresh --hold
# 僅停用Firefox的自動更新
sudo snap refresh --hold firefox
# 啟用自動更新
sudo snap refresh --unhold- 搜尋Snap Store上的軟體,例如搜尋Firefox:
snap search firefox- 安裝Snap軟體需要加sudo
sudo snap install firefox- 如果在安裝Snap軟體的時候加上
--classic,它就不會套用任何權限控制,可以存取系統上的任意檔案。
sudo snap install --classic firefox- Snap軟體安裝後應會出現在應用程式列表。或者用指令執行Snap軟體:
snap run firefox- 執行Snap軟體的時候可以加上參數,例如Firefox開啟隱私視窗:
snap run firefox -private-
可以看到執行Snap軟體需要多加
snap run的指令,但其實你也可以直接打firefox開啟Snap版的Firefox。 -
如果執行Snap版
firefox的時候顯示找不到指令,使用者要自行將Snap軟體的安裝路徑~/snap/bin加到~/.bashrc:
echo "$PATH:~/snap/bin" >> ~/.bashrc
source ~/.bashrc- 解除安裝Snap軟體的指令:
sudo snap remove firefox- 解除安裝Snap軟體的時候一併刪除使用者資料,以及自動製作的快照:
sudo snap remove --purge firefox4. Snap軟體資料位置 #
Snap軟體通常會隔離應用程式資料的存放位置,包括軟體設定檔等資料。比如Snap版Firefox會把.mozilla目錄放到~/snap/firefox/common/.mozilla/,而非直接在使用者家目錄新增.mozilla。
註:舊版Snap版Firefox還是會先嘗試讀取~/.mozilla的資料,該目錄不存在的話才會使用自身的目錄。這可能是Ubuntu想讓使用者能輕鬆從deb版Firefox切換到Snap版Firefox的設計。在最新版Firefox預設已經是使用~/snap/firefox/common/.mozilla/了。
如果Snap是以root身份安裝,Snap軟體的資料就是位於/var/snap/Snap軟體名稱/common(SNAP_COMMON)和/var/snap/Snap軟體名稱/版本號(SNAP_DATA)
一般使用者的話,Snap軟體資料位於~/snap/Snap軟體名稱/common(SNAP_COMMON)和~/snap/Snap軟體名稱/版本號(SNAP_DATA)
如果有舊版、用不到的Snap套件在佔空間,你可以直接移除快取檔:
sudo systemctl stop snapd
sudo sh -c 'rm -rf /var/lib/snapd/cache/*'
sudo systemctl start snapd5. 備份Snap軟體資料 #
Snap提供快照功能,能把目前系統安裝的Snap軟體和資料備份起來,方便日後復原。
-
使用
sudo snap save製作快照,它會將Snap與軟體資料全部儲存起來。 -
快照的數字ID是遞進計算的,使用
snap saved列出已儲存的快照,每個快照都會有一組數字。sudo snap forget 快照ID刪除快照。
-
Snap的快照也可以匯出成zip檔案,方便搬移到其他硬碟儲存,要使用的時候再匯入。
sudo snap export-snapshot 1 my-snapshot.zip
sudo snap import-snapshot my-snapshot.zip-
用
sudo snap restore 快照ID還原快照,還原時資料會直接覆蓋。 -
另外Snap可以設定
snapshots.automatic.retention的數值,啟用自動製作快照,數值不可低於24小時。數值若設定no就是不要自動製作快照。
snap set system snapshots.automatic.retention=30h6. 如何調整Snap軟體權限 #
此處供進階使用者參考,一般使用者應該不需要煩惱這些問題,因為權限應該是Snap軟體打包時就寫好了。軟體若出問題應該先向打包Snap軟體的人回報,Snap Store下方都會有開發者的聯絡資訊。
根據Snap官方文件,每個Snap軟體都有插頭Plug和插槽Slot,彼此之間使用界面Interfaces來溝通。
Snapd依賴AppArmor來管理權限,控制每個Snap程式能存取哪些系統資源。設定檔位於/var/lib/snapd/apparmor/profiles/。如果系統沒有AppArmor,則Snap會以「classic」模式執行,以上權限系統全部失效,Snap軟體將擁有存取任意系統檔案的權限。
GUI #
最簡單的權限管理方式就是開啓Linux桌面的系統設定,找到應用程式列表,在這裡修改Snap的權限。

註解:舊版Ubuntu系統是用Snap Store管理權限。在Ubuntu 24.04之後就移動到桌面環境的系統設定選單了。目前一些桌面環境有管理Snap權限的模組能安裝,例如GNOME應該是內建支援。KDE Plasma要安裝kde-config-snap才會有權限管理面板。
指令 #
GUI簡潔明白,但接下來的概念就有點複雜了。
指令snap connections --all查看所有Snap軟體的插座和插槽

使用snap connections firefox指令查看Firefox正在使用的界面。
這裡看到Firefox用firefox:audio-playback插頭連接到:audio-playback的插槽,所以瀏覽器可以播放聲音。又,Firefox有連接:home插槽,所以可以存取使用者家目錄的檔案。

使用snap connect <snap>:<plug interface>指令將二個Snap軟體連在一起,等同額外賦予權限,例如允許Firefox存取系統麥克風
snap connect firefox:audio-record當然,也可以用snap disconnect <snap>:<plug interface>指令移除Snap軟體的權限,比如禁止Firefox存取系統麥克風:
snap disconnect firefox:audio-record7. Snap技術細節與爭議 #
8. 如何刪除Snap #
如果你是想解決Snap干擾APT運作的問題,建議先看這篇再做決定:想安裝deb卻變成Snap?Ubuntu防止APT安裝Snap套件的解決方案
沒有內建Snap的Linux發行版,只要刪除所有Snap套件,再將Snapd服務移除就好。不過Ubuntu若是把Snap移除的話,就得自行解決部份deb套件缺失的問題。
- 一個一個移除所有Snap套件
sudo snap list
sudo snap remove --purge "套件名稱"- 用APT移除Snapd
sudo systemctl stop snapd
sudo apt remove --purge snapd- 刪除殘餘檔案
sudo rm -r ~/snap