如何在 Linux 上使用 Snap 包

当您使用 snap
安装 Linux 软件包时,您可以告别依赖地狱和破坏其他正在运行的应用程序。 Snap 包最初是为 Ubuntu 设计的,但现在可以在各种 Linux 发行版上使用。
什么是快照包?
过去,在 Linux 上安装应用程序可能是一种令人沮丧的体验。您安装某些东西只是为了找到特定的库或其他依赖项丢失或过时。然后你会找到丢失的资源并安装它,结果却发现另一个应用程序取决于你刚刚替换的库的版本。修复一个,打破一个,重复。
这已通过更好的包管理系统(如 apt、dnf 和 pacman)得到改善。但是,如果您需要安装同一应用程序的不同版本,您仍然会面临困难。或者,如果您使用的两个应用程序因为绑定到特定但不同的库版本而发生冲突。
这些问题的一种解决方案是应用程序打包和部署系统。 Snappy 是其中比较流行的一种。它基于名为 Click 的打包和部署系统,可以追溯到 Ubuntu Touch 计划。 AppImage 和 FlatPak 是您可能遇到过的其他工具。
这些系统将应用程序连同任何依赖项和其他要求一起封装在一个压缩文件中。然后应用程序在一种迷你容器中运行。它被沙盒化并与其他应用程序分开。应用程序打包或需要的库和其他资源只能单独使用。
它们不是传统意义上的安装,因此它们不会对需要相同资源的不同版本的其他应用程序造成任何问题。您甚至可以安装和运行需要冲突库版本的应用程序,因为每个应用程序都在自己的沙箱中。
但是,如果它们没有以通常的方式安装,它们将如何处理?好吧,单个包文件被下载、解压缩并挂载为 SquashFS
虚拟文件系统。然后它作为虚拟环境呈现给您。所有这一切都发生在幕后。您所知道的只是您已经安装了一个应用程序,现在您可以访问它了。
当然,因为每个包文件都必须包含应用程序需要的所有资源,所以包文件可能很大。复制通常只安装一次的资源也很容易,例如 MySQL 或 Apache。如果两个不同的 snap
应用程序需要相同的资源,则它们各自带来自己的副本。
不过,这是为了简化安装和消除资源冲突问题而做出的权衡。
安装 snapd
Snappy 是在 Ubuntu 16.04 中引入的,所以如果您正在运行该版本或更高版本,那么您就可以开始使用了。在我们的机器上,Snappy 安装在 Manjaro 18.04 上,但我们必须在 Fedora 31 上安装它。
snap
既是包文件的名称,也是您用来与它们交互的命令。在幕后,snapd
守护程序也是您必须安装的软件包的名称,如果您的计算机上还没有安装 Snappy。
要在 Fedora 上安装 snapd
,请键入以下命令:
sudo dnf install snapd

如果需要在 Manjaro 上安装它,请使用以下命令:
sudo pacman -Sy snapd
sudo systemctl enable --now snapd.socket
您可以使用 snap version
命令查看 snap
客户端、snapd
守护程序和软件序列号的版本。还将为您显示 Linux 发行版的名称和发行版以及内核版本。
输入以下内容:
snap version

安装 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
的发布号。
文件系统列为:/dev/loop18
。循环设备文件用于使常规文件可作为块设备访问。它们通常用于将文件系统挂载到磁盘映像中。在这种情况下,他们将 SquashFS
文件系统安装在 snap
包中。 “18”表示这是此 Linux 计算机上使用的第 18 个 /dev/loop
设备文件。
我们可以使用 df
命令来快速检查这一点。我们将使用 - t
(类型)选项将输出限制为仅 SquashFS
文件类型。
我们键入以下内容:
df -t squashfs

列出已安装的 SquashFS
文件系统。 /dev/loop
设备文件处理每一个,共有 18 个。

每个文件系统都安装在 /snap
目录中的一个目录中。但是,这并不意味着这台计算机上安装了 18 个不同的 snap
包。这是一个 Ubuntu 发行版,所以一些 snap
包是开箱即用的,我们刚刚安装了另一个。
此外,当您安装 snapd
时,它会安装一些核心 snap
包来处理其他 snap
包的需要。
我们可以使用 snap list
命令,如下所示,列出已安装的 snap
包:
snap list

输出有点宽,所以清单的结尾如下所示。

这是整个清单:
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical* core
core18 20200124 1668 stable canonical* base
gimp 2.10.18 252 stable snapcrafters -
gnome-3-26-1604 3.26.0.20191114 98 stable/... canonical* -
gnome-3-28-1804 3.28.0-16-g27c9498.27c9498 116 stable canonical* -
gnome-calculator 3.34.1+git1.d34dc842 544 stable/... canonical* -
gnome-characters v3.32.1+git3.b9120df 399 stable/... canonical* -
gnome-logs 3.34.0 81 stable/... canonical* -
gnome-system-monitor 3.32.1-3-g0ea89b4922 127 stable/... canonical* -
gtk-common-themes 0.1-28-g1503258 1440 stable/... canonical* -
如您所见,安装了 10 个 snap 包,而不是 18 个。但是,这 10 个包产生了 18 个 SquashFS
文件系统。表列是不言自明的,但这里有一些说明:
- 名称:已安装的
snap
包的名称。 - 版本:
snap
包中软件的版本号。 - Rev:
snap
包的修订号。 - Tracking:此
snap
包监控更新的渠道。有四个:- 稳定:默认频道。顾名思义,此频道包含最稳定的软件包。
- 候选:此频道不太稳定,但非常接近它,因为它包含代码完整的候选版本级软件。在转移到稳定渠道之前,它会经过最终测试。
- Beta:此渠道具有后期开发周期质量,但不保证稳定。
- Edge:适用于早期构建测试人员。您不应将此频道用于重要工作或生产计算机。这里有龙!
快照频道
您可以使用
info
选项来获取snap
包的描述。为此,我们键入以下内容:
snap info 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 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 Commands Files tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc Processes alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap Networking netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld RELATED: Best Linux Laptops for Developers and Enthusiasts