$ PC530 常用脚本

ubuntu 深度清理脚本

分类:ubuntu 系统维护 · 文件名:clean_system.sh · 收藏:0

使用示例

Ubuntu / Linux

bash <(curl -fsSL https://pc530.com/scripts/read/clean_system.sh)

WINDOWS PowerShell

irm "https://pc530.com/scripts/read/clean_system.sh" | iex

说明

Ubuntu 系统深度清理脚本 (clean_system.sh) 使用说明

本说明适用于托管在远程服务器上的系统清理脚本。该脚本可深度清理 Ubuntu(兼容 20.04/22.04)系统中的冗余缓存、旧内核、孤立软件包及长期日志,建议定期运行以释放物理磁盘空间。


🚀 一键下载与运行(手动触发)

为了防止从网络下载的文本文件在传输中混入 Windows 系统的换行符(CRLF)导致 $'\r': command not found 报错,我们在流程中加入了一行自动修复命令(sed)。

在 Ubuntu 终端中,直接复制并执行以下整段命令:

# 1. 下载脚本并保存到当前目录
curl -sSL -o clean_system.sh https://pc530.com/scripts/read/clean_system.sh

# 2. 赋予脚本执行权限
chmod +x clean_system.sh

# 3. 使用 root 权限运行脚本
sudo ./clean_system.sh
---

## ⏰ 自动化运维:添加定时自动运行

Linux 自带的 `cron` 服务可以让该脚本无人值守地定期执行。为了确保清理系统组件时拥有足够权限,我们需要将任务添加进 **root 用户**的定时任务列表中。

### 1. 打开 root 用户的定时任务编辑器

在终端输入以下命令:

```bash
sudo crontab -e
*(如果是第一次打开,系统会提示选择编辑器,直接输入数字选择默认的 `nano` 即可)*

### 2. 添加定时配置

在打开的文件最末尾,另起一行,添加以下配置(**请务必将 `/path/to/` 替换为你脚本实际存放的绝对路径**,例如 `/root/clean_system.sh`):

```text
0 3 1 * * /bin/bash /path/to/clean_system.sh > /dev/null 2>&1

```

💡 定时配置解析: * 0 3 1 * *:代表 每月 1 号的凌晨 3:00 准时自动执行。 * /bin/bash:明确指定使用系统 bash 环境运行,防止环境变量引发路径报错。 * > /dev/null 2>&1:将脚本运行时的标准输出和错误信息重定向到“黑洞”,避免每次清理完都给 root 发送系统内部邮件,保持后台干净。

3. 保存并退出

  • 如果使用的是 Nano 编辑器:按 Ctrl + O 保存,再按回车确认,最后按 Ctrl + X 退出。
  • 保存成功后,终端会提示:crontab: installing new crontab,说明定时任务已正式生效。

⚠️ 避坑提示与注意事项

  1. 绝对路径:在 crontab -e 里面填写的脚本路径必须是完整的绝对路径(如 /root/clean_system.sh/home/ubuntu/clean_system.sh),切勿使用 ~/clean_system.sh 这种相对路径简写,否则定时任务无法识别。
  2. Docker 环境安全:如果你的脚本中取消了 Docker 清理行的注释,请确保定时任务触发时(如每月 1 号凌晨 3:00),你所有需要的容器都处于 Running(运行中) 状态,否则处于停止状态的测试容器或未打标签的镜像会被直接清空。

脚本内容

#!/bin/bash

# 确保脚本是以 root 权限运行
if [ "$EUID" -ne 0 ]; then
  echo "请使用 sudo 或 root 权限运行此脚本!"
  exit 1
fi

echo "=========================================="
echo "       开始执行 Ubuntu 20.04 深度清理       "
echo "=========================================="

# 1. 软件包管理器清理
echo "--> 正在清理软件包缓存..."
apt-get update -y
apt-get autoremove --purge -y  # 卸载不再需要的孤立软件包及其配置文件
echo "--> 正在清除旧版本的 snap 包..."
# Ubuntu 20.04 默认大量使用 snap,这里只保留最新的版本,删除旧版本
snap list --all | awk '/disabled/{print $1, $3}' | while read snapname revision; do
    snap remove "$snapname" --revision="$revision"
done

# 2. 日志文件清理
echo "--> 正在清理系统日志文件..."
# 只保留最近 3 天的 journald 日志(可根据需要调整天数)
journalctl --vacuum-time=3d

# 【可选/半风险】如果想直接清空 /var/log 下的大型历史日志文件,可以取消下面行的注释
# find /var/log -type f -regex '.*\.pt_BR\.UTF-8.*\|.*\.gz\|.*\.1' -delete

# 3. 缓存与临时文件清理
echo "--> 正在清理系统缓存与临时文件..."
rm -rf /var/tmp/*
find /tmp -type f -atime +2 -delete # 删除 2 天前未访问的临时文件

# 清理当前 root 用户和普通用户的缩略图缓存
rm -rf ~/.cache/thumbnails/*
rm -rf /home/*/.cache/thumbnails/*

# 4. 【可选】Docker 深度清理
# 如果你不再使用某些 Docker 镜像或容器,可以取消下面几行的注释
# echo "--> 正在深度清理 Docker 残留..."
# docker system prune -a --volumes -f  # 警告:这会删除所有未运行的容器、未使用的镜像和卷!

# 5. 清理孤立的旧内核 (Ubuntu 20.04 通常通过 autoremove 就能处理,这里做双重保险)
echo "--> 正在检查并清理旧内核..."
current_kernel=$(uname -r)
dpkg --list | grep -E 'linux-image|linux-headers' | awk '{print $2}' | grep -v "$current_kernel" | grep -v "linux-image-generic" | grep -v "linux-headers-generic" | xargs apt-get -y purge

# 6. 刷新磁盘空间查看
echo "=========================================="
echo "               清理完成!                 "
echo "=========================================="
df -h