5.2 snap包管理入门
snap 是 Canonical 公司推出的跨 Linux 发行版的软件包格式,旨在实现“一次打包,处处运行”。它解决了传统包管理(如 apt)的依赖复杂、版本碎片化等问题,并自带沙箱安全机制。Ubuntu 22.04 默认已安装 snap,可直接使用。
1. 核心概念
- snap:软件包文件(扩展名为 .snap),包含应用及其所有依赖。
- snapd:后台服务,负责安装、更新、运行 snap 应用。
- channel:软件发布渠道,如 stable(稳定版)、candidate(候选版)、beta(测试版)、edge(每日构建版)。
- confinement:运行限制等级。
- strict:严格沙箱,默认,只能访问特定资源。
- classic:经典模式,权限与传统包类似,需手动授权。
- devmode:开发模式,完全开放但仅用于调试。
2. 常用命令
| 操作 | 命令 |
|---|---|
| 查找软件 | snap find <关键词> |
| 查看软件详情 | snap info <软件名> |
| 安装软件 | sudo snap install <软件名> |
| 指定渠道安装 | sudo snap install <软件名> --channel=<渠道> |
| 经典模式安装 | sudo snap install <软件名> --classic |
| 列出已安装 | snap list |
| 更新单个软件 | sudo snap refresh <软件名> |
| 更新所有软件 | sudo snap refresh |
| 回滚到上一版本 | sudo snap revert <软件名> |
| 卸载软件 | sudo snap remove <软件名> |
| 查看变更记录 | snap changes |
| 查看某次变更详情 | snap change <变更ID> |
3. 实用示例
安装 Nextcloud 私有云
sudo snap install nextcloud
安装完成后,访问 http://你的IP 即可开始配置。
安装 VLC 媒体播放器
sudo snap install vlc
安装经典模式软件(如 helm) 有些软件需要经典模式才能访问系统全部资源:
sudo snap install helm --classic
切换软件发布渠道 例如将 Nextcloud 切换到候选版:
sudo snap switch nextcloud --channel=candidate
sudo snap refresh nextcloud
查看已安装软件的权限(接口)
snap connections nextcloud
可查看该软件使用的 plug(请求权限)和 slot(提供权限)。
4. 管理 snap 的磁盘占用
snap 会保留旧版本以便回滚,但可能占用大量磁盘空间。查看已保留版本:
snap list --all
清理旧版本(保留最新两个):
sudo snap set system refresh.retain=2
或手动删除某软件的旧版本:
sudo snap remove <软件名> --revision=<版本号>
5. 常见问题
命令找不到:某些 snap 安装后,其可执行文件不在 PATH 中,但 snap 会自动将命令链接到/snap/bin,确保该目录在 PATH 中(Ubuntu 默认已添加)。
权限不足:如果软件需要访问摄像头、蓝牙等资源,需手动连接接口,例如:
sudo snap connect <软件名>:camera :camera
更新策略:snap 默认每天自动检查更新,可通过 sudo snap refresh --hold 临时暂停。
6. 进阶学习
snap 还有丰富的安全机制、接口管理、打包工具(snapcraft)等。如果你对底层原理或如何制作自己的 snap 包感兴趣,可参考后续章节《snap 深入剖析》或官方文档 snapcraft.io。