如何在 Linux 中清理 Snap 包的版本
创始人
2024-03-02 10:06:08
0

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

它有其优点和缺点。其中一个缺点是,Snap 包通常体积较大,占用大量的磁盘空间。如果你的磁盘空间不够用,特别是在根分区上,这可能是一个问题。

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

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

与 snap 有关的系统文件都存放在 /var/lib/snapd 目录下。根据你所安装的 Snap 包的数量,这个目录的大小可能在几 GB。不要只听我的一面之词。通过 使用 du 命令检查目录大小 来进行评估。

$ sudo du -sh /var/lib/snapd
5.4G    /var/lib/snapd

你也可以使用磁盘使用分析器这个 GUI 工具来查看 Ubuntu 的磁盘使用情况

Snap disk usage

这可真够多的,对吧?你可以在这里腾出一些磁盘空间。根据设计,Snap 至少会在你的系统上保留一个你所安装的软件包的旧版本。你可以通过使用 Snap 命令看到这种行为:

snap list --all

你应该看到同一个软件包被列了两次,而且版本和修订号都不同。

Snap keeps at least two versions of each package

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

不要担心。你不需要手动操作。由于 Alan Pope 在 Snapcraft 团队工作时写的一个灵巧的 bash 脚本,有一种自动的方法可以做到。

我希望你知道 如何创建和运行 bash shell 脚本。基本上,创建一个名为 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

保存它并关闭编辑器。要运行这个脚本,把它放在你的主目录中,然后 在 Ubuntu 中打开终端,运行这个命令:

sudo bash clean-snap.sh

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

Removing old snap package versions

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

$ sudo du -sh /var/lib/snapd
3.9G    /var/lib/snapd

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

这个脚本是如何工作的?

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

你已经看到了 snap list -all 命令的输出。它的输出被传递给 awk 命令。Awk 是一个强大的脚本工具。

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

这个输出被进一步传递给 whileread 命令的组合。读取命令获取第一列的 Snap 包名和第三列的修订号变量。

然后,这些变量被用来运行 snap remove 命令,用 Snap 包名和它的修订号来删除。

只要发现有包含 disabled 字符串的行,就会运行 while 循环。

如果你对 shell 脚本略知一二,这一切就很容易理解了。如果你不熟悉,我们有一个 初学者的 bash 教程系列 给你。

你拿回了你的空间了吗?

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

sudo snap set system refresh.retain=2

我认为现在不需要了。现在 Snap 的默认行为是为任何软件包保存两个版本。

总而言之,如果你的空间不够用,摆脱额外的软件包版本肯定是 释放 Ubuntu 磁盘空间的方法 之一。

如果这个教程帮助你释放了一些空间,请在评论区告诉我。


via: https://itsfoss.com/clean-snap-packages/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

不显示字符串,显示此奇怪错...
根据提供的代码片段,错误似乎是由于未定义的函数Fn()导致的。要解...
2025-01-10 09:01:10
新手必读:在Ubuntu上...
在使用Ubuntu这个流行的Linux发行版时,很多新手用户可能会...
2024-12-26 13:12:54
BuildingQuick...
这是一个构建QuickFIX/J分发3.0.0-SNAPSHOT时...
2024-12-25 14:01:03
不合法的Parquet文件...
在AWS Glue Catalog表中使用Snappy文件可能引发...
2024-12-24 19:01:39
Buggysnap-scr...
问题描述:在页面上有一个可滚动的HTML元素,并且在滚动过程中,D...
2024-12-24 16:01:47
BlueSnap API ...
要访问BlueSnap API并获取储存的购物者的名字和姓氏,您可...
2024-12-23 02:31:53

热门资讯

使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
Bazzite:专为 Stea... 为 Linux 桌面或者 Steam Deck 做好游戏准备,听起来都很刺激!对于一个专为 Linu...
Motrix:一个漂亮的跨平台... 一个开源的下载管理器,提供了一个简洁的用户界面,同时提供了跨平台操作的所有基本功能。在这里了解关于它...
Bash 脚本中如何使用 he... here 文档 here document (LCTT 译注:here 文档又称作 heredoc ...
使用 dialog 和 jq ... 为何选择文字用户界面(TUI)?许多人每日都在使用终端,因此, 文字用户界面 Text User I...