![설치된 스냅의 이전 버전을 제거하는 방법](https://rvso.com/image/1557624/%EC%84%A4%EC%B9%98%EB%90%9C%20%EC%8A%A4%EB%83%85%EC%9D%98%20%EC%9D%B4%EC%A0%84%20%EB%B2%84%EC%A0%84%EC%9D%84%20%EC%A0%9C%EA%B1%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
저는 스냅 사용이 처음이고 시스템에 앱이 거의 설치되어 있지 않습니다. 명령을 실행할 때 df -h
동일한 스냅의 다른 버전이 마운트된 것을 발견했습니다.
/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
내 질문은 그들이 거기에 보관하는 이유입니다. 오래된 것을 제거하는 유일한 방법은 스냅을 제거하고 다시 설치하는 것입니다.
prune
내 시스템을 유지 관리하는 것과 같은 것이 있습니까 ?
답변1
다음은 제거할 짧은 스크립트입니다.모두이전 버전의 스냅. 이렇게 하면 현재 활성 버전만 유지되므로 일부 디스크 공간이 복구됩니다.
#!/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
업데이트하기 전에 애플리케이션을 다시 시작하지 않았을 수 있기 때문에 "스냅 닫기"가 표시됩니다. 따라서 스크립트에 의해 제거될 개정판을 실제로 실행하고 있을 가능성이 있습니다.
답변2
버전다른 답변의 스크립트, 종속성 없이 한 줄로 작성 awk
:
snap list --all | while read snapname ver rev trk pub notes; do if [[ $notes = *disabled* ]]; then snap remove "$snapname" --revision="$rev"; fi; done
이를 위해서는 해당 구성 bash
과 호환되는 쉘이 필요할 수 있습니다 [[
.
답변3
snap v2.34 이상부터 옵션을 설정하여 각 패키지에 대해 저장되는 최대 스냅 개정 수를 설정할 수 있습니다 refresh.retain
. 숫자만 가능합니다.2에서 20 사이그리고기본값 3.
sudo snap set system refresh.retain=2
답변4
코드@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