如何在 Linux 上使用 Snap 包

已發表: 2022-01-29
Ubuntu

當您使用snap安裝 Linux 軟件包時,您可以告別依賴地獄並破壞其他工作應用程序。 Snap 軟件包最初是為 Ubuntu 設計的,但現在可以在各種 Linux 發行版上使用。

什麼是快照包?

過去,在 Linux 上安裝應用程序是一種潛在的令人沮喪的體驗。 您安裝某些東西只是為了發現特定的庫或其他依賴項丟失或過時。 然後,您將尋找丟失的資源並安裝它,卻發現另一個應用程序取決於您剛剛替換的庫的版本。 修復一個,打破一個,重複。

這已經通過更好的包管理系統得到改善,比如 apt、dnf 和 pacman。 但是,如果您需要安裝同一應用程序的不同版本,您仍然會遇到困難。 或者,如果您使用兩個應用程序發生衝突,因為它們綁定到特定但不同的庫版本。

這些問題的一種解決方案是應用程序打包和部署系統。 Snappy 是其中比較流行的一種。 它基於一個名為 Click 的打包和部署系統,這可以追溯到 Ubuntu Touch 倡議。 AppImage 和 FlatPack 是您可能遇到的其他內容。

這些系統將應用程序與任何依賴項和其他要求一起封裝在一個壓縮文件中。 然後應用程序在一種迷你容器中運行。 它被沙盒化並與其他應用程序分離。 應用程序打包或需要的庫和其他資源只能單獨使用。

廣告

它們不是傳統意義上的安裝,因此它們不會對需要相同資源的不同版本的其他應用程序造成任何問題。 您甚至可以安裝和運行需要衝突庫版本的應用程序,因為每個應用程序都在自己的沙箱中。

但是,如果它們沒有以通常的方式安裝,它們是如何處理的? 好了,單個包文件被下載、解壓並掛載為SquashFS虛擬文件系統。 然後將其作為虛擬環境呈現給您。 所有這些都發生在幕後。 您所知道的只是您已經安裝了一個應用程序,並且現在您可以訪問它了。

當然,因為每個包文件都必須包含應用程序所需的所有資源,所以包文件可能很大。 複製通常只安裝一次的資源也很容易,例如 MySQL 或 Apache。 如果兩個不同的snap應用程序需要相同的資源,它們各自帶來自己的副本。

這是安裝簡單性和消除資源衝突問題的折衷方案。

安裝 snapd

Snappy 是在 Ubuntu 16.04 中引入的,因此,如果您正在運行該版本或更高版本,那麼您已經可以開始使用了。 在我們的機器上,Snappy 安裝在 Manjaro 18.04 上,但我們必須將它安裝在 Fedora 31 上。

snap既是包文件的名稱,也是您用來與它們交互的命令。 在幕後,如果您的計算機上還沒有 Snappy,那麼snapd守護進程也是您必須安裝的軟件包的名稱。

要在 Fedora 上安裝snapd ,請輸入以下命令:

 須藤 dnf 安裝 snapd 

廣告

如果您需要在 Manjaro 上安裝它,請使用以下命令:

 sudo pacman -Sy snapd
 sudo systemctl enable --now snapd.socket

您可以使用snap version命令查看snap客戶端、 snapd守護進程和軟件序列號的版本。 您的 Linux 發行版的名稱和版本以及內核版本也會顯示給您。

鍵入以下內容:

 快照版

安裝 snap 包

安裝snap包是一個非常簡單的過程。 您可以使用snap來查找snap包,然後安裝您想要的包。

我們鍵入以下內容來查找並安裝 gimp 圖像編輯器:

 snap find gimp 

snap搜索搜索線索“gimp”的匹配項並返回其結果。 它會找到與搜索詞匹配或提及的任何內容。

要安裝其中一個軟件包,我們使用Name列中的值,如下所示:

 sudo snap install gimp 

廣告

當它下載時,完成百分比數字上升,一個進度條從終端窗口的左側爬過。 安裝完成後,會出現一條消息(如下所示),告訴您軟件包已安裝。

您可以使用df命令檢查 Linux 計算機上配置的不同文件系統的容量和使用情況。 如果我們將其輸出通過管道傳輸到grep命令並蒐索“gimp”,我們就會隔離我們剛剛安裝的包的條目。

我們輸入以下內容:

 df | grep gimp 

這向我們展示了 snap 包被掛載,就好像它是一個文件系統一樣。 掛載點位於此處的snap目錄中: /snap/gimp/252 。 “252”是這個版本的gimp的發行號。

相關:如何在 Linux 上使用 grep 命令

文件系統列為: /dev/loop18 。 循環設備文件用於使常規文件可作為塊設備訪問。 它們通常用於在磁盤映像中安裝文件系統。 在這種情況下,他們將SquashFS文件系統安裝在snap包中。 “18”表示這是此 Linux 計算機上使用的第 18 個/dev/loop設備文件。

我們可以使用df命令快速檢查這一點。 我們將使用t (type) 選項將輸出限制為僅SquashFS文件類型。

我們輸入以下內容:

 df -t 壁球

列出了掛載的SquashFS文件系統。 /dev/loop設備文件處理每一個,共有 18 個。

廣告

每個文件系統都安裝在/snap目錄中的一個目錄上。 但是,這並不意味著這台計算機上安裝了 18 個不同的snap包。 這是一個 Ubuntu 發行版,所以一些snap包是開箱即用的,我們剛剛安裝了另一個。

此外,當您安裝snapd時,它會安裝一些核心snap包來處理其他snap包的需求。

我們可以使用snap list命令,如下圖所示,列出已安裝的snap包:

 快照列表

輸出有點寬,所以列表的結尾如下所示。

這是整個清單:

 名稱 版本 Rev Tracking 出版商註釋
核心 16-2.43.3 8689 穩定規範* 核心
core18 20200124 1668 穩定規範* 基礎
gimp 2.10.18 252 穩定的 snapcrafters -
gnome-3-26-1604 3.26.0.20191114 98 穩定/...規範* -
gnome-3-28-1804 3.28.0-16-g27c9498.27c9498 116 穩定規範* -
gnome-calculator 3.34.1+git1.d34dc842 544 stable/...規範* -
gnome-characters v3.32.1+git3.b9120df 399 穩定/...規範* -
gnome-logs 3.34.0 81 穩定/...規範* -
gnome-system-monitor 3.32.1-3-g0ea89b4922 127 穩定/...規範* -
gtk-common-themes 0.1-28-g1503258 1440 穩定/...規範* -

如您所見,安裝了 10 個 snap 包,而不是 18 個。但是,這 10 個包產生了 18 個SquashFS文件系統。 表格列是不言自明的,但這裡有一些說明:

  • Name :已安裝的snap包的名稱。
  • 版本snap包中軟件的版本號。
  • Rev : snap包的版本號。
  • 跟踪:此snap包監視更新的通道。 有四個:
    • 穩定:默認通道。 顧名思義,該頻道包含最穩定的軟件包。
    • 候選:這個頻道不太穩定,但非常接近它,因為它包含發布候選級別的軟件,這是代碼完整的。 在移至穩定通道之前,它會經過最終測試。
    • Beta:此渠道是後期開發週期質量,但不能保證穩定。
    • Edge:適用於早期構建測試人員。 您不應將此頻道用於重要工作或在生產計算機上。 這裡是龍!
  • 發布者:發布snap包的個人、公司或組織。 如果它是經過驗證的發布者(並且您的終端窗口支持 Unicode),您會在發布者名稱旁邊看到一個綠色複選標記。 如果它不能顯示複選標記,您將看到一個星號 ( * )。
  • 注意:任何評論或附加信息都會出現在這裡。

快照頻道

您可以使用info選項來獲取snap包的描述。

為此,我們鍵入以下內容:

 快照信息 gtk-common-themes 

廣告

我們可以看到包正在跟踪哪個渠道,以及四個渠道中每個渠道的snap包中的軟件版本。 在大多數情況下,您應該留在穩定頻道。

一個snap包每天檢查四次,以查看它正在觀看或“跟踪”的頻道是否有更新版本的軟件可用。 如果要更改snap包跟踪的頻道,可以使用refresh--channel選項。

為此,我們鍵入以下內容:

 sudo snap refresh gtk-common-themes --channel=beta 

如果有更新版本的軟件可用,它將被安裝,但這裡不是這種情況。 但是, snap包現在正在跟踪 beta 通道。 一旦發布了新的測試版,它就會自動下載和​​升級。

您可以使用--list選項檢查計算機上安裝的任何snap包是否有可用的更新。

為此,我們鍵入以下內容:

 sudo snap refresh --list 

如果您計算機上的snap包正在跟踪的任何頻道包含較新的軟件版本,您將被告知。

廣告

如果有更新版本的軟件可用,您可以使用如下所示的refresh選項手動強制刷新:

 sudo snap refresh gtk-common-themes 

刪除 snap 包

要卸載snap包,可以使用 remove 選項,如下所示:

 sudo snap remove gimp 

快照備忘單

使用 snap 包非常簡單,但我們編譯了一些命令列表,這些命令將對您有所幫助:

  • 搜索包: snap find package_name
  • 安裝包: sudo snap install package_name
  • 查看所有已安裝的軟件包: snap list
  • 獲取有關單個包的信息: snap info package_name
  • 要更改包跟踪更新的頻道: sudo snap refresh package_name --channel=channel_name
  • 要查看是否已為任何已安裝的軟件包準備好更新: sudo snap refresh --list
  • 手動更新包: sudo snap refresh package_name
  • 卸載包: sudo snap remove package_name

相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦