So entfernen Sie alte Versionen installierter Snaps

So entfernen Sie alte Versionen installierter Snaps

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 -hverschiedene 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 prunezur 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 awkAbhä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 basheine 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.retainOption 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

verwandte Informationen