如何在 Linux 中清理 Snap 软件包版本 [Quick Tip]

Snap 包并不是每个人都喜欢,但它们是 Ubuntu 生态系统不可或缺的一部分。

它有它的优点和缺点。 不利因素之一是 Snap 包通常体积更大并且占用大量磁盘空间。

如果您的磁盘空间不足,特别是在根分区上,这可能是一个问题。

让我分享一个巧妙的技巧,您可以使用它来减少 Snap 软件包使用的磁盘空间。

清理旧的 Snap 软件包版本以释放磁盘空间

snap 相关的系统文件存放在 /var/lib/snapd 目录下。 根据您安装的 Snap 软件包的数量,此目录大小可能以数 GB 为单位。

不要只相信我的话。 通过以下方式进行评估 使用 du 命令检查目录大小。

[email protected]:~$ sudo du -sh /var/lib/snapd 5.4G	/var/lib/snapd

您还可以使用 Disk Usage Analyzer GUI 工具查看 Ubuntu 中的磁盘使用情况。

很多,对吧? 您可以在此处释放一些磁盘空间。

按照设计,Snap 至少会保留您系统上安装的软件包的一个旧版本。

您可以使用 Snap 命令查看此行为:

snap list --all

您应该会看到相同的包列出了两次,但版本和修订号不同。

要释放磁盘空间,您可以删除其他软件包版本。 你怎么知道要删除哪一个? 您可以看到这些较旧的软件包被标记为“已禁用”。

别担心。 您不必手动执行此操作。 有一种自动的方法可以做到这一点,这要归功于一个漂亮的 bash 艾伦·波普 (Alan Pope) 工作时编写的剧本 快手 团队。

请注意,此脚本可能不适用于法语和其他一些语言,因为“禁用”标签在不同语言中可能不同。

我希望你知道如何创建和运行 bash 外壳脚本。 基本上,创建一个名为 clean-snap.sh 的新文件并添加以下行。

#!/bin/bash # Removes old revisions of snaps # CLOSE ALL SNAPS BEFORE RUNNING THIS set -eu snap list --all | awk '/disabled/{print $1, $3}' |     while read snapname revision; do         snap remove "$snapname" --revision="$revision"     done

Save 它和 close 编辑。

要运行此脚本,请将其保存在您的主目录中,然后在 Ubuntu 中打开终端并运行以下命令:

sudo bash clean-snap.sh

您可以看到它开始删除旧版本的软件包。

如果您现在检查 Snap 使用的磁盘空间,您会发现目录大小现在减小了。

[email protected]:~$ sudo du -sh /var/lib/snapd 3.9G	/var/lib/snapd

如果这对您有用,您可以偶尔运行此命令。

这个脚本是如何工作的?

如果您对这个脚本的作用感到好奇,让我解释一下。

您已经看到了“snap list –all”命令的输出。 它的输出被传递给 awk 命令. awk 是一个强大的脚本工具。

awk ‘/disabled/{print $1, $3}’ 部分在每一行中查找字符串 ‘disabled’,如果找到,它会提取第一列和第三列。

此输出进一步传递给 while 和 read 命令的组合。 读取命令将第一列的值获取到 snapname,将第三列的值获取到修订变量。

然后使用这些变量运行 snap remove 命令以删除跨度包名称及其修订号的名称。

只要在其中找到带有 ‘disabled’ 字符串的行,while 循环就会运行。

如果您对 shell 脚本有所了解,这一切都很容易理解。 如果您不熟悉,我们有一个 bash 初学者教程系列 为你。

你的GB恢复了吗?

您可能会看到一些论坛建议将 Snap 包保留值设置为 2。

sudo snap set system refresh.retain=2

我认为不再需要它了。 现在 Snap 的默认行为是为任何包存储总共 2 个版本。

总而言之,如果您的空间不足,那么摆脱额外的软件包版本肯定是在 Ubuntu 上释放磁盘空间的方法之一。

如果本教程帮助您释放了一些空间,请在评论部分告诉我。