![So entfernen Sie alte Versionen installierter Snaps](https://rvso.com/image/1557624/So%20entfernen%20Sie%20alte%20Versionen%20installierter%20Snaps.png)
Ich bin neu in der Verwendung von Snap. Auf meinem System sind nur wenige Apps installiert. Als ich den Befehl ausführte, bemerkte ich, dass df -h
verschiedene Versionen desselben Snaps installiert waren:
/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
Meine Frage ist, warum sie dort bleiben. Die einzige Möglichkeit, die alten zu entfernen, besteht meiner Meinung nach darin, den Druckknopf abzuziehen und erneut anzubringen.
Gibt es etwas prune
zur Wartung meines Systems?
Antwort1
Hier ist ein kurzes Skript, das entferntallealte Versionen von Snaps. Dadurch wird nur die aktuelle aktive Version beibehalten, wodurch Sie etwas Speicherplatz sparen sollten:
#!/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
Die Funktion „Snaps schließen“ ist vorhanden, weil Sie möglicherweise eine Anwendung vor dem Update nicht neu gestartet haben. Es ist also möglich, dass Sie tatsächlich eine Revision ausführen, die vom Skript entfernt werden soll.
Antwort2
Eine Version desSkript aus einer anderen Antwort, als Einzeiler, ohne die awk
Abhängigkeit:
snap list --all | while read snapname ver rev trk pub notes; do if [[ $notes = *disabled* ]]; then snap remove "$snapname" --revision="$rev"; fi; done
Dies erfordert wahrscheinlich bash
eine mit der [[
Konstruktion kompatible Shell.
Antwort3
Ab Snap v2.34 und höher können Sie die maximale Anzahl der für jedes Paket gespeicherten Snap-Revisionen festlegen, indem Sie die refresh.retain
Option festlegen – es kann nur eine Zahl seinzwischen 2 und 20und hat eineStandardwert von 3.
sudo snap set system refresh.retain=2
Antwort4
Der Code@popey hat in seiner Antwort mitgeteiltschlägt tatsächlich manchmal fehl, da einige defekte Pakete keine Versionsinformationen haben. Also habe ich den Code geändert, um dieses Problem zu beheben.
#!/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