Ubuntu 系统移除 Snap 的一键脚本
— ghostart
有些人为了精简会选择 Debian 系统,但对大部分非 Dev Ops 来说,Ubuntu 系统用起来更方便。
不过一些内存比较小(如 1GB 左右)的 VPS,移除 Snap 以节省内存和容量占用是值得操作的。
创建脚本
vim rm-snap.sh#!/bin/bash
# 定义颜色输出
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 1. 检查是否以 Root 运行
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}请使用 sudo 或 root 用户运行此脚本!${NC}"
exit 1
fi
echo -e "${YELLOW}警告:此操作将彻底卸载 Snapd 及所有已安装的 Snap 应用。${NC}"
echo -e "${YELLOW}请确保你没有正在使用的重要 Snap 服务(如 LXD 等)。${NC}"
echo -e "5秒后开始执行..."
sleep 5
# 2. 循环卸载已安装的 Snap 应用
# Snap 需要先卸载应用,再卸载 core/base,否则会报错。
# 这里的逻辑是循环尝试卸载,直到列表为空。
if command -v snap &> /dev/null; then
echo -e "${GREEN}==> 正在检测并卸载已安装的 Snap 应用...${NC}"
# 获取 Snap 列表 (排除标题行)
SNAP_LIST=$(snap list | awk 'NR>1 {print $1}')
if [ -n "$SNAP_LIST" ]; then
echo -e "发现已安装 Snap: $SNAP_LIST"
# 简单的循环卸载,如果因为依赖关系失败,后续的 apt purge 会强制清理
for snap_name in $SNAP_LIST; do
echo -e "正在尝试卸载: ${YELLOW}$snap_name${NC}"
snap remove "$snap_name" 2>/dev/null
done
# 再次尝试清理残留的核心 (如 core, snapd, bare)
for snap_name in $(snap list | awk 'NR>1 {print $1}'); do
snap remove "$snap_name" 2>/dev/null
done
else
echo "没有发现已安装的 Snap 应用。"
fi
else
echo "未检测到 snap 命令,跳过应用卸载步骤。"
fi
# 3. 停止 Snapd 服务
echo -e "${GREEN}==> 停止相关服务...${NC}"
systemctl stop snapd.socket 2>/dev/null
systemctl stop snapd.service 2>/dev/null
systemctl disable snapd.service 2>/dev/null
systemctl stop snapd.seeded.service 2>/dev/null
# 4. 通过 APT 彻底卸载 Snapd
echo -e "${GREEN}==> 从系统中移除 Snapd 包...${NC}"
apt autoremove --purge snapd -y
apt autoremove --purge gnome-software-plugin-snap -y 2>/dev/null
# 5. 清理残留文件和目录
echo -e "${GREEN}==> 清理残留文件和挂载点...${NC}"
rm -rf /var/cache/snapd/
rm -rf /root/snap
rm -rf /snap
rm -rf /var/snap
rm -rf /var/lib/snapd
# 清理普通用户的 snap 目录
rm -rf /home/*/snap
# 6. 阻止 Snapd 自动重装 (APT Pinning)
echo -e "${GREEN}==> 设置 APT 偏好以禁止 Snapd 重装...${NC}"
cat <<EOF > /etc/apt/preferences.d/nosnap.pref
Package: snapd
Pin: release a=*
Pin-Priority: -10
EOF
# 7. 更新 APT 缓存
echo -e "${GREEN}==> 更新 APT 缓存...${NC}"
apt update
echo -e "${GREEN}=======================================${NC}"
echo -e "${GREEN} Snapd 已成功卸载并被禁止重装! ${NC}"
echo -e "${GREEN}=======================================${NC}"
# 检查内存使用情况
echo -e "当前内存使用情况:"
free -h
# 提示重启
echo -e "操作完成,请执行 apt update && apt upgrade -y && apt autoremove -y"赋予执行权限
chmod +x rm-snap.sh执行脚本
./rm-snap.sh更新系统
apt update && apt upgrade -y && apt autoremove -y重启
reboot