Snap下载是一种革命性的软件包管理系统,它能够将应用程序与其所有依赖项一起打包,创建可以在不同Linux发行版上运行的独立应用程序。这种容器化方法确保了应用程序无论在什么系统环境下都能一致运行,消除了Linux用户经常遇到的“依赖地狱”问题。
一、软件功能

跨平台支持:Snap可以在多个不同的Linux发行版中正常运行,包括Ubuntu、Debian、Arch Linux、Fedora、Kaili Linux、openSUSE、Red Hat等。
包含依赖项:Snap软件包不仅包括应用程序本身,还包括其依赖项和运行环境,这使得应用程序能够在不同的系统环境中独立运行,避免了依赖关系的问题。
支持多种应用类型:Snap可包含一个或多个服务,支持cli(命令行)应用、GUI图形应用以及无单进程限制。可以在单个Snap下调用一个或多个服务,对于多服务的应用来说非常方便。
资源隔离:Snap应用默认被严格限制(confined),即限制系统权限和资源访问。但可通过授予权限策略来获得对系统资源的访问。每个Snap有一个只读的文件系统和一个可写入的区域,应用自身的执行文件、库、依赖包都放在只读目录,不能被随意篡改和写入,安全性较高。
接口(interface)定义:Snap应用间可通过interface定义来做资源交换。interface被用于让Snap可访问OpenGL加速、声卡播放/录制、网络和HOME目录等,由slot(提供者)和plug(消费者)组成。
二、软件特色
沙箱运行:Snap应用以沙箱的方式运行,系统通过一些机制限制应用访问资源的权限来实现其安全特性,比如通过对内核安全机制AppArmor、Seccomp等的配置实现沙箱和Snap文件系统等。每个Snap应用程序命令都有唯一的security policy ID,系统将此ID与命令绑定,可配置不同的安全策略,并且在沙箱中运行的Snap应用之间的通信控制也通过此ID来进行配置。
Snap文件系统:Snap文件系统被划分为具有只读和读写两种不同权限的区域,每个Snap应用有其独有的受限文件目录。这种方式实现了应用与应用、应用与系统之间的隔离,同时对Snap应用的升级和回滚提供了很好的支持,升级时只需将确定版本的相关目录复制到更高版本的对应目录,而回退只需删除更高版本的目录。
自动更新和回滚:Snap支持自动更新和回滚功能,使得应用程序的更新和安装管理更加方便、高效。用户可以修改更新发生的时间和频率,还可以保留和推迟选定快照的更新。
安全策略:
Sandbox:Linux Sandbox是根据内核中支持的一些安全机制实现的进程访问控制方式,Snap应用使用这种方式运行在系统为其分配的沙箱环境中。
AppArmor:AppArmor是一个强制访问控制系统,在内核层面对进程可访问的资源进行控制。在Snap应用程序安装时,系统会为其中的每一个命令生成其特有的AppArmor配置文件,内核对可执行程序的Capability限制也可以通过AppArmor来配置。
Seccomp:Seccomp是一个内核接口访问过滤器,Snap应用程序通过其独有的过滤器访问内核接口,在Snap应用程序启动之前会自动配置过滤器,其作用类似于AppArmor,都是控制应用程序对系统资源的访问。
三、同类软件对比
| 对比维度 | Snap | Apt | Flatpak |
| 包含软件 | 主要包含高级、独立和最新版本的软件 | 包含更多的软件包,包括一些稳定但版本较老的软件 | 支持大量的Linux发行版,包含多种软件 |
| 依赖关系 | 通过将应用程序及其依赖项捆绑到一个独立的Snap软件包中来解决依赖问题 | 需要处理软件之间的依赖关系,并确保它们都可用 | 解决依赖问题,应用程序之间相互隔离 |
| 更新机制 | 提供自动更新机制,应用程序的更新会自动下载和部署,但可以选择要更新的版本 | 用户需要手动执行apt
get update和apt
get upgrade来更新软件包 | 支持自动更新,但更新策略与Snap有所不同 |
| 安全性 | 在沙箱中运行,如果某个应用程序发生故障,只会影响该应用程序,不会影响其他程序或系统 | 通过apt安装的软件包可能会对整个操作系统造成影响 | 提供安全沙箱环境,保障应用程序的安全性 |
| 支持的Linux发行版 | 支持多个主流的Linux发行版,如Ubuntu、Debian、Fedora等 | 主要用于Debian系的Linux发行版 | 支持多种Linux发行版,包括Ubuntu、Fedora、CentOS等 |
四、软件使用说明
安装Snap:
对于Ubuntu系统,可以通过以下命令安装Snap:
bash
sudo apt update
sudo apt install snapd
snap version
验证安装成功后,可以使用Snap命令来管理应用程序。
常用命令:
查找应用程序:
bash
snap find <应用程序名称>
snap info <应用程序名称>
安装应用程序:
bash
sudo snap install <应用程序名称>
sudo snap install <应用程序名称> channel=版本/stable
管理已安装的应用程序:
bash
snap list
sudo snap refresh
sudo snap refresh <应用程序名称>
sudo snap remove <应用程序名称>
使用Snap服务:
bash
snap services
sudo snap start/stop <服务名称>
注意事项:
Snap软件包默认会自动更新,但可以使用`snap refresh hold <应用程序名称>`命令禁用特定Snap的自动更新,要重新启用更新则使用`snap refresh unhold <应用程序名称>`命令。
某些应用程序可能需要在安装或更新后重启系统才能正常运行。
五、安装步骤
安装Snapd:
在支持Snap的Linux发行版上,首先需要安装Snapd,这是一个处理Snap安装和更新的管理环境。可以通过以下命令安装:
bash
sudo apt update
sudo apt install snapd
安装完成后,可以通过`snap version`命令验证安装是否成功。
安装Snap应用:
安装Snapd后,就可以使用`sudo snap install <应用程序名称>`命令来安装Snap应用了。例如,安装VSCode可以使用`sudo snap install classic code`命令。
六、相关应用
Snap下载的相关应用非常广泛,涵盖了从开发工具到日常使用的各种软件。以下是一些常见的Snap应用:
VSCode:一款流行的开源代码编辑器,支持多种编程语言和开发工具。
PyCharm:一个专门用于Python开发的集成开发环境(IDE),提供了丰富的开发工具和插件支持。
MySQL Workbench:一个用于管理和开发MySQL数据库的可视化工具,提供了数据库设计、SQL开发和管理等功能。
Postman:一个API开发和测试工具,支持RESTful API的开发、测试和文档生成。
.NET运行时:Microsoft提供的.NET运行时环境,可以通过Snap安装不同版本的.NET运行时,如`sudo snap install dotnet - runtime - 80`。