我是使用 snap 的新手,我的系统上安装的应用程序很少,运行命令时我注意到了一些df -h我发现安装了同一 snap 的不同版本
/dev/loop0 143M 143M 0 100% /var/lib/snapd/snap/gravit-designer/7
/dev/loop1 82M 82M 0 100% /var/lib/snapd/snap/core/4110
/dev/loop7 198M 198M 0 100% /var/lib/snapd/snap/polarr/3
/dev/loop2 82M 82M 0 100% /var/lib/snapd/snap/core/4206
/dev/loop3 143M 143M 0 100% /var/lib/snapd/snap/gravit-designer/6
/dev/loop10 137M 137M 0 100% /var/lib/snapd/snap/gravit-designer/5
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么他们保留在那里,我发现删除旧的唯一方法是删除并重新安装快照,有什么东西prune可以维护我的系统?
小智 144
这是一个简短的脚本,它将删除所有旧版本的快照。这只会保留当前的活动版本,这应该会为您恢复一些磁盘空间:
#!/bin/bash
# Removes old revisions of snaps
# CLOSE ALL SNAPS BEFORE RUNNING THIS
set -eu
LANG=C snap list --all | awk '/disabled/{print $1, $3}' |
while read snapname revision; do
snap remove "$snapname" --revision="$revision"
done
Run Code Online (Sandbox Code Playgroud)
Mus*_*did 74
从捕捉v2.34开始以后,你可以设置通过设置存储每个包扣修订的最大数量refresh.retain的选项,它只能是数字2和20之间,并具有3缺省值。
sudo snap set system refresh.retain=2
Run Code Online (Sandbox Code Playgroud)
Ger*_*erg 63
# snap list --all | while read snapname ver rev trk pub notes; do if [[ $notes = *disabled* ]]; then snap remove "$snapname" --revision="$rev"; fi; done
Run Code Online (Sandbox Code Playgroud)
这可能需要bash与[[构造兼容的外壳。
小智 33
版本上的snapd 文档指出应自动删除过时的修订版,以便安装的修订版不超过最后两个修订版。但是,我还看到安装了两个以上版本的快照。
您可以列出所有修订snap list --all以查看以下内容:
Name Version Rev Tracking Developer Notes
core 16-2.31.2 4206 stable canonical core,disabled
core 16-2.32.3 4407 stable canonical core,disabled
core 16-2.32.5 4486 stable canonical core
spotify 1.0.70.399.g5ffabd56-26 5 stable spotify disabled
spotify 1.0.72.117.g6bd7cc73-35 6 stable spotify disabled
spotify 1.0.77.338.g758ebd78-41 13 stable spotify -
Run Code Online (Sandbox Code Playgroud)
您可以使用snap remove spotify --revision=5.
即使对于禁用的修订版core和其他依赖项,这也是安全的,并且snap remove显式--revision=...甚至可以防止您删除非disabled快照。
小智 7
@popey 在他们的答案中共享的代码实际上有时会失败,因为一些损坏的包没有版本信息。所以我修改了代码来克服这个问题。
#!/bin/bash
# Removes old revisions of snaps
# CLOSE ALL SNAPS BEFORE RUNNING THIS
set -eu
snapsToRemove=$(LANG=en_US.UTF-8 snap list --all | awk '/disabled/{print $1, $2, $3}')
while read snapname version revision; do
if [[ "$revision" == *[a-zA-z]* ]]; then
# Version field is empty. Revision is in second field
revision=$version
fi
snap remove "$snapname" --revision="$revision"
done <<< $snapsToRemove
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83302 次 |
| 最近记录: |