在购买云服务器(特别是华为云、阿里云等公共镜像)时,系统常常默认预装了大量面向桌面端、移动通信或冗余诊断的服务。这些服务不仅常驻后台白白消耗内存,还可能带来潜在的安全风险。
本文提供一份针对 Debian/Ubuntu 服务器的安全瘦身脚本。本脚本聚焦于清理与服务器核心功能无关的“垃圾”组件,绝对不碰网络配置、SSH 服务及防火墙核心,清理后可释放大量内存与存储空间。
一、 优化前必读
- 适用系统:Debian / Ubuntu 系列公共镜像。
- 核心原则:
- 不碰网络:保留所有网卡管理、IP 配置、SSH 远程连接核心依赖。
- 精准卸载:仅移除移动网络模块、多余快照、诊断工具及未使用的容器附加组件。
- 安全提示:执行脚本前建议对重要数据或虚拟机快照进行备份。
二、 完整清理与优化脚本
您可以直接复制以下完整的脚本,保存为 clean_server.sh。
# 1. 赋予执行权限
chmod +x clean_server.sh
# 2. 运行脚本
sudo ./clean_server.sh
#!/bin/bash
# 确保脚本以 root 权限运行
if [ "$EUID" -ne 0 ]; then
echo "请使用 sudo 或 root 权限运行此脚本!"
exit 1
fi
echo "=== 开始执行服务器极速瘦身与清理任务 ==="
# 0. 更新软件源索引
sudo apt update
# 1. 卸载移动网络、调制解调器及拨号组件(常见于公有云镜像中常驻后台并吃内存的冗余项)
echo "[1/5] 清理移动网络与拨号冗余组件..."
sudo apt purge -y \
modemmanager \
usb-modeswitch usb-modeswitch-data \
libmbim-glib4 libmbim-proxy libmbim-utils \
libqmi-glib5 libqmi-proxy libqmi-utils \
libqrtr-glib0 \
libmm-glib0 \
ppp pppoe pppoeconf
# 注:如果您确定服务器不需要连接 Wi-Fi,可以取消下面这行的注释一并卸载;
# 如果是常规云服务器,直接忽略即可。
# sudo apt purge -y wpasupplicant
# 2. 清理 Docker rootless 模式残留及相关用户态网络工具
echo "[2/5] 清理 Docker Rootless 及相关残留..."
sudo apt purge -y docker-ce-rootless-extras slirp4netns libslirp0
# 3. 清理服务器完全用不到的桌面/诊断/快照工具
echo "[3/5] 清理云服务器无需的 snap、cloud-init 及诊断工具..."
sudo apt purge -y \
snapd \
cloud-init \
popularity-contest \
installation-report \
command-not-found \
dnsmasq-base \
pigz \
apport apport-symptoms
# 4. 深度大扫除:联动清理孤立的无用依赖及旧安装包缓存
echo "[4/5] 深度清理孤立依赖与缓存..."
sudo apt autoremove -y
sudo apt autoclean
# 5. 清理系统日志与历史轮替压缩包(进一步释放磁盘空间)
echo "[5/5] 清理系统日志..."
sudo journalctl --vacuum-time=2weeks
sudo rm -rf /var/log/*.log.* /var/log/*.gz
echo "=== 清理完成!系统将在 3 秒后重启以彻底释放内存... ==="
sleep 3
# 6. 重启系统使更改完全生效
reboot
三、 脚本清理内容详细解析
- 移动网络与拨号组件 (
modemmanager,ppp,libqmi等):- 公共镜像通常继承自桌面版或通用版基础镜像,内置了用于 3G/4G 上网卡、拨号连接的守护进程。对于纯粹的云端 Linux 服务器而言,这些服务毫无用处,卸载后能有效防止其异常唤醒和内存占用。
snapd与cloud-init:snapd:Ubuntu 推广的软件包管理器,会创建大量虚拟回环设备 (squashfs) 并在后台持续占用内存。如果您的服务器不依赖 Snap 安装软件,强烈建议卸载。cloud-init:主要用于云主机首次启动时的自动化初始化(如注入 SSH 密钥、配置密码等)。如果您的服务器已经初始化完毕且后续不再通过云厂商后台重置系统配置,可以安全移除。
- 诊断与反馈工具 (
apport,popularity-contest,command-not-found):- 这些是系统崩溃报告、用户匿名统计以及命令找不到时的提示辅助工具,常驻后台会带来不必要的系统开销。
- 日志与缓存瘦身:
- 通过
journalctl限制系统日志仅保留最近两周,并清理历史轮替日志文件,能立竿见影地腾出数十 MB 到数 GB 的宝贵磁盘空间。
- 通过