Snap 包管理器速查表

使用 Snap 管理器的通用 Linux 软件包

Snap 是 Canonical 推出的革命性通用包管理系统,为 Ubuntu 和其他 Linux 发行版带来了容器化应用程序、自动更新和增强的安全性。

cross-dependent-modules 这张令人惊叹的图片由 AI 模型 Flux 1 dev 生成。

什么是 Snap?

Snap 是 Canonical 为使用 Linux 内核的操作系统开发的软件打包和部署系统。Snap 包(称为“snaps”)是容器化的软件包,可以在各种 Linux 发行版上运行,提供一致的应用程序体验。与传统包共享系统库不同,Snaps 打包了所有依赖项,确保在不同系统上行为一致。

主要特点:

  • 自包含:每个 snap 包含所有依赖项(无冲突)
  • 自动更新:在后台自动更新(每天检查 4 次)
  • 沙箱化:AppArmor 隔离提供安全性
  • 通用性:适用于 Ubuntu、Fedora、Debian、Arch 等
  • 事务性:更新是原子的,可以回滚
  • 后台服务:snapd 守护进程管理 snaps 和更新

包管理器比较

Ubuntu 支持多种包管理系统。以下是主要操作的比较:

操作 Snap APT Flatpak
搜索 snap find keyword apt search keyword flatpak search keyword
安装 sudo snap install package sudo apt install package flatpak install flathub app.id
列出已安装 snap list apt list --installed flatpak list --app
显示信息 snap info package apt show package flatpak info app.id
更新所有 sudo snap refresh sudo apt update && sudo apt upgrade flatpak update
更新单个 sudo snap refresh package sudo apt install --only-upgrade pkg flatpak update app.id
卸载 sudo snap remove package sudo apt remove package flatpak uninstall app.id
清理 snap remove --revision=N sudo apt autoremove flatpak uninstall --unused
仓库 Snap Store(内置) /etc/apt/sources.list 使用 flatpak remote-add 添加

快速功能比较

功能 Snap APT Flatpak
自动更新
沙箱化
依赖项 打包 系统库 共享运行时
包大小 大(50-500MB) 小(5-50MB) 中(20-200MB)
需要 root 权限 否(用户安装)
启动速度 较慢
最适合 通用应用 系统包 桌面应用

关于本指南

本指南聚焦于 Snap - Canonical 的通用包管理器,具有自动更新和强大的沙箱化功能。Snap 非常适合跨发行版的应用程序、桌面软件以及需要自动安全更新而无需手动干预的场景。

对于其他包管理器:

每个包管理器都有其优势。使用 Snap 适用于需要自动更新和跨版本兼容性的应用程序,使用 APT 适用于系统包和库,使用 Flatpak 适用于具有细粒度权限控制的桌面应用。


Snap 包管理 - 详细指南

安装 snapd

Ubuntu(16.04+ 预装)

Snap 在 Ubuntu 16.04 及更高版本中预装。如果您正在设置新的 Ubuntu 安装,请查看我们的 全面指南:安装 Ubuntu 24.04 和必备工具 以获取完整的设置流程。

# 检查 snapd 是否已安装
snap version

# 如果未安装,安装它
sudo apt update
sudo apt install snapd

# 启用 snapd 服务
sudo systemctl enable --now snapd.socket

# 可选:启用经典 snap 支持
sudo ln -s /var/lib/snapd/snap /snap

其他发行版

Debian:

sudo apt update
sudo apt install snapd
sudo systemctl enable --now snapd.socket

Fedora:

sudo dnf install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap

Arch Linux:

git clone https://aur.archlinux.org/snapd.git
cd snapd
makepkg -si
sudo systemctl enable --now snapd.socket

Linux Mint:

在 Linux Mint 上安装 Snap 需要启用兼容性。如果您计划全新安装,请查看我们的 重新安装 Linux Mint 并安装有用工具 指南以获取完整的设置流程。

CentOS/RHEL:

sudo yum install snapd
sudo systemctl enable --now snapd.socket

必要的 Snap 命令

安装 Snaps

基本安装:

# 从稳定通道安装
sudo snap install package-name

# 从特定通道安装
sudo snap install package-name --channel=beta
sudo snap install package-name --channel=edge

# 使用经典限制安装
sudo snap install package-name --classic

# 安装特定版本/修订
sudo snap install package-name --revision=123

现实示例:

# 安装 VS Code
sudo snap install code --classic

# 安装 Spotify
sudo snap install spotify

# 安装 Docker
sudo snap install docker

# 安装 VLC 媒体播放器
sudo snap install vlc

# 安装 Chromium 浏览器
sudo snap install chromium

# 安装 kubectl
sudo snap install kubectl --classic

# 安装 Slack
sudo snap install slack --classic

# 安装 Postman
sudo snap install postman

# 安装 Android Studio
sudo snap install android-studio --classic

# 安装 Node.js
sudo snap install node --classic

搜索 Snaps

# 搜索 Snap Store
snap find keyword

# 详细搜索输出
snap find keyword --verbose

# 搜索特定部分
snap find --section=development

# 示例
snap find "文本编辑器"
snap find 数据库
snap find "媒体播放器"

按类别浏览:

# 列出可用部分
snap find --section

# 常见部分包括:
# - 生产力
# - 开发
# - 服务器和云
# - 安全
# - 娱乐
# - 图片和视频
# - 音乐和音频

列出已安装的 Snaps

# 列出所有已安装的 snaps
snap list

# 详细列出
snap list --all

# 显示特定 snap
snap list package-name

# 按发布者列出
snap list --all | grep "发布者名称"

输出包括:

  • 名称:Snap 包名称
  • 版本:当前版本
  • Rev:修订号
  • Tracking:跟踪的通道
  • 发布者:已验证的发布者
  • Notes:限制类型和标志

查看 Snap 信息

# 显示详细 snap 信息
snap info package-name

# 示例输出包括:
# - 描述
# - Snap ID
# - 发布者
# - 许可证
# - 可用通道
# - 安装版本
# - 更新日期

示例:

snap info vlc

输出显示:

name:      vlc
summary:   最终的媒体播放器
publisher: VideoLAN✓
license:   GPL-2.0+
description: |
  VLC 是一个免费和开源的多媒体播放器...
snap-id: 123abc...
channels:
  stable:    3.0.18  2023-03-15 (3078) 276MB -
  candidate: ↑
  beta:      ↑
  edge:      4.0.0~dev 2023-03-20 (3079) 280MB -
installed:   3.0.18  (3078) 276MB -

更新 Snaps

更新所有 Snaps:

# 更新所有已安装的 snaps
sudo snap refresh

# 检查可用更新而不安装
snap refresh --list

更新特定 Snap:

# 更新单个 snap
sudo snap refresh package-name

# 更新到特定通道
sudo snap refresh package-name --channel=beta

# 更新到特定修订
sudo snap refresh package-name --revision=456

自动更新:

Snaps 默认自动更新。snapd 守护进程每天检查 4 次更新。

配置更新时间表:

# 查看当前刷新定时器
snap refresh --time

# 设置刷新定时器(需要 snapd 2.31+)
sudo snap set system refresh.timer=fri,23:00-01:00

# 暂时暂停更新(最多 90 天)
sudo snap refresh --hold

# 暂停特定 snap 的更新
sudo snap refresh --hold package-name

# 取消暂停更新
sudo snap refresh --unhold
sudo snap refresh --unhold package-name

删除 Snaps

# 删除 snap(保留数据)
sudo snap remove package-name

# 删除 snap 和所有数据(清除)
sudo snap remove --purge package-name

# 删除特定修订
sudo snap remove package-name --revision=123

清理旧版本:

默认情况下,Snap 保留 2-3 个旧版本以供回滚:

# 列出所有版本
snap list --all package-name

# 删除特定旧版本
sudo snap remove package-name --revision=old-rev-number

# 脚本删除所有旧版本
#!/bin/bash
snap list --all | awk '/disabled/{print $1, $3}' | 
  while read snapname revision; do
    sudo snap remove "$snapname" --revision="$revision"
  done

有关 bash 脚本和命令行操作的更多信息,请查看我们的 全面 Bash 命令速查表

运行 Snaps

# 运行 snap 应用程序
snap run package-name

# 运行特定命令
snap run package-name.command

# 示例:运行特定的 VS Code 命令
snap run code --list-extensions

# 显示 snap 的可用命令
snap info package-name | grep "commands:"

理解 Snap 通道

通道允许开发者同时发布不同版本:

通道类型

  1. stable:生产就绪的版本(默认)
  2. candidate:候选版本,预发布测试
  3. beta:带有新功能的测试版本
  4. edge:最新的开发构建,可能不稳定

通道轨道

一些 snap 有多个轨道(例如,主要版本):

# 示例:安装 LXD 4.0 轨道
sudo snap install lxd --channel=4.0/stable

# 示例:安装特定的 Kubernetes 版本
sudo snap install microk8s --channel=1.28/stable

切换通道

# 切换到不同通道
sudo snap refresh package-name --channel=beta

# 切换回 stable
sudo snap refresh package-name --channel=stable

# 查看可用通道
snap info package-name

Snap 限制级别

严格限制

最高安全性,snap 与系统隔离:

# 大多数 snap 使用严格限制
sudo snap install vlc

特点:

  • 有限的文件系统访问
  • 需要接口连接以访问硬件
  • AppArmor 配置文件强制执行安全
  • 适合桌面应用

经典限制

完全系统访问,类似于传统包:

# 许多开发工具需要经典限制
sudo snap install code --classic
sudo snap install kubectl --classic

特点:

  • 没有沙箱
  • 完全的文件系统访问
  • 需要系统工具和 IDE
  • 安全性较低但兼容性更好

开发模式限制

开发模式,限制禁用:

# 仅用于测试/开发
sudo snap install package-name --devmode

特点:

  • 没有安全限制
  • 用于 snap 开发
  • 不建议用于生产
  • 违规记录但不强制执行

检查限制

# 查看限制级别
snap list
# 查看:classic, devmode, 或 strict(无标签)

# 详细信息
snap info package-name | grep confinement

Snap 接口和连接

接口定义了 snap 如何与系统资源通信。

查看接口

# 列出所有可用接口
snap connections

# 显示特定 snap 的接口
snap connections package-name

# 列出所有可能的接口
snap interface

# 显示特定接口的详细信息
snap interface interface-name

常见接口

  • home:访问用户主目录
  • network:网络访问
  • audio-playback:音频输出
  • camera:摄像头访问
  • removable-media:USB 驱动器、SD 卡
  • x11:X11 显示服务器
  • wayland:Wayland 显示服务器
  • opengl:GPU 加速
  • pulseaudio:PulseAudio 声音服务器

管理连接

# 连接接口
sudo snap connect package-name:interface-name

# 断开接口
sudo snap disconnect package-name:interface-name

# 示例:授予摄像头访问权限
sudo snap connect package-name:camera

# 示例:允许可移动媒体访问
sudo snap connect package-name:removable-media

自动连接:

大多数接口在安装时自动连接。一些需要手动连接以确保安全。

高级 Snap 使用

Snap 服务

一些 snap 作为后台服务运行:

# 列出服务
snap services

# 列出特定 snap 的服务
snap services package-name

# 启动服务
sudo snap start package-name.service-name

# 停止服务
sudo snap stop package-name.service-name

# 重启服务
sudo snap restart package-name.service-name

# 启用服务(启动时启动)
sudo snap start --enable package-name.service-name

# 禁用服务
sudo snap stop --disable package-name.service-name

# 查看服务日志
snap logs package-name.service-name

# 实时跟踪日志
snap logs -f package-name.service-name

# 显示最后 N 行
snap logs -n=50 package-name.service-name

Snap 配置

# 查看 snap 配置
snap get package-name

# 查看特定配置键
snap get package-name key-name

# 设置配置
sudo snap set package-name key=value

# 示例
sudo snap set microk8s hostpath-storage=/data/k8s
sudo snap get microk8s hostpath-storage

# 取消配置
sudo snap unset package-name key-name

Snap 别名

为 snap 命令创建快捷方式:

# 创建别名
sudo snap alias package-name.command alias-name

# 示例:为 kubectl 命令创建别名
sudo snap alias microk8s.kubectl kubectl

# 列出别名
snap aliases

# 删除别名
sudo snap unalias alias-name

# 删除 snap 的所有别名
sudo snap unalias package-name

Snap 布局

布局使旧版应用在受限 snap 中工作:

# 查看 snap 布局
snap info package-name | grep "layout:"

布局将 snap 路径映射到预期的系统路径。

Snap Store 和发布

浏览 Snap Store

网页界面:

命令行:

# 特色 snap
snap find --section=featured

# 按类别
snap find --section=productivity
snap find --section=games

# 私有 snap(需要认证)
snap find --private

从文件安装

# 安装本地 snap 文件
sudo snap install package-name.snap --dangerous

# 安装并连接接口
sudo snap install package-name.snap --dangerous --classic

注意: --dangerous 会绕过本地文件的签名验证。

解决 Snap 问题

常见问题和解决方案

Snap Store 无法加载

# 重启 snapd 服务
sudo systemctl restart snapd.service

# 检查服务状态
sudo systemctl status snapd.service

# 查看日志
sudo journalctl -u snapd.service -n 50

Snap 启动缓慢

原因:

  • 首次运行解压
  • 文件系统挂载
  • AppArmor 配置文件加载

解决方案:

# 预连接所有接口
sudo snap connect package-name:interface

# 如果不需要,禁用某些接口
sudo snap disconnect package-name:interface

# 检查 snap 启动时间
time snap run package-name

连接问题

# 验证网络接口
snap connections package-name | grep network

# 手动连接网络
sudo snap connect package-name:network

# 检查防火墙
sudo ufw status

Snap 安装失败

# 清除 snap 缓存
sudo rm -rf /var/lib/snapd/cache/*

# 重新安装 snap
sudo snap remove package-name
sudo snap install package-name

# 检查磁盘空间
df -h /var/lib/snapd

# 修复损坏的 snap 状态
sudo snap changes
sudo snap abort <change-id>  # 如果卡住

AppArmor 拒绝

# 检查 AppArmor 日志
sudo dmesg | grep DENIED

# 查看特定 snap 配置文件
sudo apparmor_parser -r /var/lib/snapd/apparmor/profiles/snap.*

# 重新加载 AppArmor
sudo systemctl reload apparmor

Snap 版本冲突

# 列出所有版本
snap list --all package-name

# 删除旧版本
sudo snap remove package-name --revision=old-number

# 回滚到旧版本
sudo snap revert package-name

# 检查 snap 变更
snap changes

调试 Snaps

# 启用调试模式
sudo snap set system debug.snapd=true

# 查看 snap 环境
snap run --shell package-name
# 然后运行:env

# 检查 snap 文件布局
ls -la /snap/package-name/current/

# 查看 snap 元数据
cat /snap/package-name/current/meta/snap.yaml

# 跟踪 snap 执行
snap run --trace-exec package-name

# 检查 snap 断言
snap known assertion-type

性能优化

减少磁盘使用

# 检查 snap 存储使用
du -sh /var/lib/snapd/snaps/*

# 自动删除旧版本
# 设置 refresh.retain 为 2(仅保留 2 个旧版本)
sudo snap set system refresh.retain=2

# 手动清理脚本
#!/bin/bash
# 删除所有禁用的 snap 版本
LANG=C snap list --all | awk '/disabled/{print $1, $3}' | 
  while read snapname revision; do
    sudo snap remove "$snapname" --revision="$revision"
  done

优化启动性能

1. 预连接接口:

# 安装时预连接常用接口
sudo snap connect package-name:home
sudo snap connect package-name:network

2. 使用并行刷新:

编辑 /var/lib/snapd/state.json(高级):

{
  "data": {
    "parallel-installs": 4
  }
}

3. 限制后台更新:

# 设置更新窗口为低使用时间
sudo snap set system refresh.timer=sun,02:00-04:00

监控 Snap 性能

# 检查 snap 进程使用
ps aux | grep snap

# 监控 snap 服务资源
systemctl status snap.package-name.service-name

# 查看 snapd 资源使用
systemctl status snapd

# 检查 snap 挂载点
mount | grep snap

安全最佳实践

验证发布者

# 检查发布者验证
snap info package-name | grep publisher

# 查看 ✓(已验证)或 ✪(星号 - Canonical)

尽可能从已验证的发布者安装。

审查权限

# 安装前检查所需接口
snap info package-name | grep plugs

# 安装后审查连接
snap connections package-name

# 断开不必要的接口
sudo snap disconnect package-name:interface-name

定期更新

# 保持 snaps 更新
sudo snap refresh

# 启用自动安全更新
# (默认启用)
snap refresh --time

审计已安装的 Snaps

# 列出所有 snaps 和限制
snap list

# 检查 devmode snaps(安全性较低)
snap list | grep devmode

# 审查 classic snaps(全系统访问)
snap list | grep classic

使用严格限制

优先使用具有严格限制的 snap 以获得更好的安全性:

# 安装前检查限制
snap info package-name | grep confinement

# 避免在生产中使用 --devmode

企业环境中的 Snap

代理配置

# 设置 HTTP 代理
sudo snap set system proxy.http="http://proxy:8080"

# 设置 HTTPS 代理
sudo snap set system proxy.https="https://proxy:8080"

# 查看代理设置
snap get system proxy

离线安装

# 下载 snap
snap download package-name

# 转移到离线系统并安装
sudo snap install package-name_*.snap --dangerous

# 包含断言以进行签名安装
sudo snap ack package-name_*.assert
sudo snap install package-name_*.snap

Snap Store 代理

在企业环境中,部署 Snap Store 代理:

  • 本地缓存 snap
  • 控制可用 snap
  • 监控安装
  • 减少带宽使用

请参阅:https://docs.ubuntu.com/snap-store-proxy/

管理 Snap 更新

# 按 snap 禁用自动刷新(需要代理)
sudo snap refresh --hold=forever package-name

# 在维护窗口期间安排更新
sudo snap set system refresh.timer=sat,02:00-04:00

# 手动批准更新
sudo snap refresh --list  # 查看
sudo snap refresh package-name  # 更新特定

按类别流行的 Snap 软件

开发工具

sudo snap install code --classic              # VS Code
sudo snap install intellij-idea-community --classic  # IntelliJ
sudo snap install pycharm-community --classic  # PyCharm
sudo snap install android-studio --classic    # Android Studio
sudo snap install sublime-text --classic      # Sublime Text
sudo snap install atom --classic              # Atom Editor
sudo snap install postman                     # API 测试
sudo snap install dbeaver-ce                  # 数据库工具

DevOps 与云

sudo snap install kubectl --classic           # Kubernetes CLI
sudo snap install helm --classic              # Helm
sudo snap install microk8s --classic          # 轻量级 K8s
sudo snap install docker                      # Docker
sudo snap install terraform --classic         # Terraform
sudo snap install aws-cli --classic           # AWS CLI
sudo snap install azure-cli --classic         # Azure CLI
sudo snap install google-cloud-sdk --classic  # GCP SDK

生产力工具

sudo snap install slack --classic             # Slack
sudo snap install teams                       # MS Teams
sudo snap install discord                     # Discord
sudo snap install zoom-client                 # Zoom
sudo snap install mailspring                  # 邮件客户端
sudo snap install joplin-desktop             # 笔记应用
sudo snap install libreoffice                # 办公套件

多媒体

sudo snap install vlc                        # 视频播放器
sudo snap install spotify                    # 音乐流媒体
sudo snap install obs-studio                 # 屏幕录制
sudo snap install gimp                       # 图像编辑器
sudo snap install inkscape                   # 矢量图形
sudo snap install audacity                   # 音频编辑器
sudo snap install kdenlive                   # 视频编辑器

浏览器

sudo snap install chromium                   # Chromium
sudo snap install firefox                    # Firefox
sudo snap install opera                      # Opera
sudo snap install brave                      # Brave 浏览器

系统工具

sudo snap install htop                       # 进程监视器
sudo snap install bpytop                     # 系统监视器
sudo snap install speedtest-cli              # 速度测试
sudo snap install certbot --classic          # SSL 证书
sudo snap install ngrok                      # 隧道

为了提高使用这些工具和 Ubuntu 的整体工作效率,请查看我们的 Ubuntu 键盘快捷键速查表 以实现高效的流程管理。

选择合适的包管理器

何时使用 Snap ✅

最适合:

  • 需要跨发行版兼容性
  • 自动更新很重要
  • 安全性优先(通过沙箱)
  • 需要最新版本的应用程序
  • 桌面应用程序
  • 物联网和嵌入式设备(Ubuntu Core)

何时使用其他包管理器

  • APT:请参阅我们的 APT 包管理指南 以了解系统包、库和传统的 Ubuntu 包管理
  • Flatpak:请参阅我们的 Flatpak 包管理指南 以了解具有细粒度权限且没有后台守护进程的桌面应用程序

Snap 命令参考

快速命令速查表

# 搜索与安装
snap find keyword              # 搜索 Snap
sudo snap install name         # 安装 Snap
sudo snap install name --classic  # 经典限制
sudo snap install name --channel=beta  # 指定通道

# 列表与信息
snap list                      # 列出已安装
snap list --all               # 包括旧版本
snap info name                # 显示 Snap 详情
snap version                  # 显示 Snapd 版本

# 更新
sudo snap refresh             # 更新所有
sudo snap refresh name        # 更新特定
snap refresh --list           # 检查更新
sudo snap refresh --hold      # 延迟更新

# 删除
sudo snap remove name         # 删除 Snap
sudo snap remove --purge name # 删除并清除数据
sudo snap remove name --revision=N  # 删除特定版本

# 服务
snap services                 # 列出服务
sudo snap start name.service  # 启动服务
sudo snap stop name.service   # 停止服务
sudo snap logs name.service   # 查看日志

# 连接
snap connections              # 列出连接
snap connections name         # Snap 连接
sudo snap connect name:plug   # 连接接口
sudo snap disconnect name:plug # 断开连接

# 配置
snap get name                 # 查看配置
sudo snap set name key=value  # 设置配置
snap get system               # 系统配置

# 通道
sudo snap refresh name --channel=edge  # 切换通道
sudo snap track name          # 显示跟踪

# 别名
sudo snap alias name.cmd cmd  # 创建别名
snap aliases                  # 列出别名
sudo snap unalias cmd         # 删除别名

# 故障排除
snap changes                  # 显示最近更改
snap tasks <change-id>        # 任务详情
snap abort <change-id>        # 中止更改
sudo snap revert name         # 回滚到之前版本

结论

Snap 包管理器凭借其通用的打包方式、自动更新和通过容器化增强的安全性,代表了 Linux 应用程序分发的未来。虽然它在磁盘使用和启动性能方面存在权衡,但简化依赖管理、跨发行版兼容性和一致更新的好处使其成为现代 Linux 应用程序的绝佳选择。

无论你是部署应用程序的开发人员、管理更新的系统管理员,还是想要最新软件的用户,Snap 都提供了一个强大、安全且用户友好的包管理解决方案。

关键要点:

  • Snap 包是自包含的,可在不同发行版中使用
  • 自动更新确保你的应用程序安全且最新
  • 沙箱通过限制提供增强的安全性
  • 多种限制级别在安全性和功能之间取得平衡
  • 通道允许你在稳定性与最新功能之间做出选择
  • Snap 非常适合桌面应用程序和物联网设备

开始探索 Snap 商店,体验通用 Linux 打包的便利!

有用链接

本站相关文章