Snap 包管理器速查表
使用 Snap 管理器的通用 Linux 软件包
Snap 是 Canonical 推出的革命性通用包管理系统,为 Ubuntu 和其他 Linux 发行版带来了容器化应用程序、自动更新和增强的安全性。
这张令人惊叹的图片由 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 非常适合跨发行版的应用程序、桌面软件以及需要自动安全更新而无需手动干预的场景。
对于其他包管理器:
- 📦 APT 命令速查表 - Ubuntu 的传统包管理器,用于系统包和库
- 📦 Flatpak 包管理器速查表 - 跨发行版的桌面应用,具有细粒度权限控制
每个包管理器都有其优势。使用 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 通道
通道允许开发者同时发布不同版本:
通道类型
- stable:生产就绪的版本(默认)
- candidate:候选版本,预发布测试
- beta:带有新功能的测试版本
- 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
网页界面:
- 访问 https://snapcraft.io/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 打包的便利!