如何在 Linux 上使用 Snap 包
已发表: 2022-01-29
当您使用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 命令 | ||
| 文件 | 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 ·字符串·类型·重命名· zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
| 流程 | 别名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超时·墙·是·杀死·睡眠· sudo · su ·时间· groupadd · usermod ·组· lshw ·关机·重新启动·停止·关机· passwd · lscpu · crontab ·日期· bg · fg | |
| 联网 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑
