在检查安装在系统中的 snap 包时,我注意到一些包有重复,一个具有超过修订号,而另一个具有较新的修订号。对于这样的重复包,我的问题是:
- 为什么它们是重复的?
- 我可以删除旧软件包以确保更好的磁盘空间管理吗?
- 如何删除旧包?
以下是有和没有重复的包的示例:
$ du -hcs /var/lib/snapd/snaps/*
31M /var/lib/snapd/snaps/2048x_3.snap
286M /var/lib/snapd/snaps/atom_282.snap
4.0K /var/lib/snapd/snaps/bare_5.snap
72M /var/lib/snapd/snaps/bitwarden_58.snap
72M /var/lib/snapd/snaps/bitwarden_59.snap
196M /var/lib/snapd/snaps/blender_1113.snap
214M /var/lib/snapd/snaps/blender_1237.snap
9.1M /var/lib/snapd/snaps/canonical-livepatch_119.snap
9.1M /var/lib/snapd/snaps/canonical-livepatch_126.snap
148M /var/lib/snapd/snaps/chromium_1854.snap
148M /var/lib/snapd/snaps/chromium_1864.snap
17M /var/lib/snapd/snaps/chromium-ffmpeg_23.snap
18M /var/lib/snapd/snaps/chromium-ffmpeg_24.snap
....
~$ ls -lh /var/lib/snapd/snaps/
total 12G
-rw------- 2 root root 31M Aug 5 06:23 2048x_3.snap
-rw------- 2 root root 286M Aug 5 08:35 atom_282.snap
-rw------- 2 root root 4.0K Sep 22 18:17 bare_5.snap
-rw------- 1 root root 72M Oct 30 00:20 bitwarden_58.snap
-rw------- 1 root root 72M Dec 9 04:28 bitwarden_59.snap
-rw------- 1 root root 196M Nov 18 04:06 blender_1113.snap
-rw------- 1 root root 214M Dec 4 09:39 blender_1237.snap
-rw------- 2 root root 9.1M Nov 17 21:06 canonical-livepatch_119.snap
-rw------- 2 root root 9.1M Nov 22 22:39 canonical-livepatch_126.snap
-rw------- 1 root root 148M Dec 16 04:28 chromium_1854.snap
-rw------- 1 root root 148M Jan 8 08:33 chromium_1864.snap
-rw------- 1 root root 17M Sep 3 06:29 chromium-ffmpeg_23.snap
-rw------- 2 root root 18M Nov 29 14:23 chromium-ffmpeg_24.snap
....
在我正在查看的系统上,使用的总磁盘空间/var/lib/snapd/snaps/*
为 12,180.248 MB。所有重复包(即同一包的旧版本)的磁盘空间为 4,163.1 MB。简而言之,较旧的修订包目前占 12,180.248 MB 的 34.18%。这似乎是使用我以前没有意识到的 SNAP 应用程序的成本。
要回答您的问题:
为什么它们是重复的?
⇢ 它们是不同的修订版(版本),而不是重复。
我可以删除旧软件包以确保更好的磁盘空间管理吗?
⇢ 是的。毕竟是你的电脑。
如何删除旧包?
您可以像这样在终端中执行此操作:
您还可以告诉系统将自己限制为多少过去的版本,如下所示:
注意:该值必须介于
2
和之间20
,并且通常建议使用类似2
or的数字3
以节省存储空间并允许在发生错误更新时回滚。如果您想列出所有快照及其版本,可以运行以下命令:
这会给你类似的东西:
需要脚本吗?
重要提示:在继续之前,您需要检查
snap list --all
计算机上的输出,如果您使用的语言环境不是en_US.UTF-8
.剧本:
这将运行
snap list -all
并提取包含单词的行disabled
。这将根据您的语言环境而有所不同,因此请先检查函数的输出,然后更新awk '/disabled/
以替换disabled
为在您的输出中找到的标签。将脚本保存到文件(例如
scrub-snaps.sh
),然后将其设置为可执行:现在你可以运行它了,记住使用
sudo
:注意:
sudo
不是脚本的一部分,但如果您愿意将其添加到脚本中,可以添加。无论哪种方式,如果需要,系统都会提示您输入密码。保留至少一个旧版本的快照是设计中固有的。
Snap 软件包最初是为各种环境设计的,在这些环境中,通常没有人工管理员和/或无法连接键盘和显示器……比如电话或 IOT 设备。弹性是这些系统的关键要求:如果应用程序崩溃或升级损坏,则需要某种形式的保证回滚而无需人工干预。因此,手头至少需要一个旧版本。
经典台式机和服务器上的人们不太关心回滚功能。他们喜欢不同的 snap 设计元素:独立于操作系统的安全自动升级、只读 squashfs 防篡改、进程限制等。
但这都是一个单一的标准,因此您也可以获得回滚功能。即使你认为你不会使用它。
您不能“禁用”快照的回滚功能——它不是真正的“功能”,而是一个关键的设计元素。
在@matigo 回答的基础上,我编写了一个python 脚本来自动删除禁用的SNAP 包。它允许用户在继续(或不继续)删除过程之前目视检查 snap 包。链接中显示了执行脚本的作用示例。
remove_disabled_snap_pkgs.py