如何在 Linux 中清理 Snap 包的版本
Snap 軟件包并不是每個人都喜歡的,但它們是 Ubuntu 生態(tài)系統(tǒng)中不可或缺的一部分。
它有其優(yōu)點和缺點。其中一個缺點是,Snap 包通常體積較大,占用大量的磁盤空間。如果你的磁盤空間不夠用,特別是在根分區(qū)上,這可能是一個問題。
讓我分享一個巧妙的技巧,你可以用它來減少 Snap 包使用的磁盤空間。
清理舊的 Snap 包版本以釋放磁盤空間
與 snap 有關的系統(tǒng)文件都存放在 /var/lib/snapd 目錄下。根據(jù)你所安裝的 Snap 包的數(shù)量,這個目錄的大小可能在幾 GB。不要只聽我的一面之詞。通過 使用 du 命令檢查目錄大小 來進行評估。
$ sudo du -sh /var/lib/snapd
5.4G /var/lib/snapd
你也可以使用磁盤使用分析器這個 GUI 工具來查看 ??Ubuntu 的磁盤使用情況??。
Snap disk usage
這可真夠多的,對吧?你可以在這里騰出一些磁盤空間。根據(jù)設計,Snap 至少會在你的系統(tǒng)上保留一個你所安裝的軟件包的舊版本。你可以通過使用 Snap 命令看到這種行為:
snap list --all
你應該看到同一個軟件包被列了兩次,而且版本和修訂號都不同。
Snap keeps at least two versions of each package
為了釋放磁盤空間,你可以刪除額外的軟件包版本。你怎么知道要刪除哪一個呢?你可以看到,這些較舊的軟件包被標記為“禁用”。
不要擔心。你不需要手動操作。由于 Alan Pope 在 Snapcraft 團隊工作時寫的一個靈巧的 bash 腳本,有一種自動的方法可以做到。
我希望你知道 如何創(chuàng)建和運行 bash shell 腳本?;旧?,創(chuàng)建一個名為 clean-snap.sh 的新文件,并在其中添加以下幾行。
# 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如果你現(xiàn)在檢查 Snap 使用的磁盤空間,你會發(fā)現(xiàn)現(xiàn)在的目錄大小已經減少了。
$ sudo du -sh /var/lib/snapd
3.9G /var/lib/snapd
如果這對你有用,你可以偶爾運行這個命令。
這個腳本是如何工作的?
如果你對這個腳本的作用感到好奇,讓我來解釋一下。
你已經看到了 snap list -all 命令的輸出。它的輸出被傳遞給 awk 命令。Awk 是一個強大的腳本工具。
awk '/disabled/{print $1, $3}' 部分在每一行中尋找字符串 disabled,如果找到它,它將提取第一列和第三列。
這個輸出被進一步傳遞給 while 和 read 命令的組合。讀取命令獲取第一列的 Snap 包名和第三列的修訂號變量。
然后,這些變量被用來運行 snap remove 命令,用 Snap 包名和它的修訂號來刪除。
只要發(fā)現(xiàn)有包含 disabled 字符串的行,就會運行 while 循環(huán)。
你拿回了你的空間了嗎?
你可能會看到一些論壇建議將 Snap 軟件包的保留值設置為 2。
sudo snap set system refresh.retain=2
我認為現(xiàn)在不需要了?,F(xiàn)在 Snap 的默認行為是為任何軟件包保存兩個版本。
總而言之,如果你的空間不夠用,擺脫額外的軟件包版本肯定是 釋放 Ubuntu 磁盤空間的方法 之一。