前言

一个简单的脚本用来清理磁盘空间,可以手动运行或者定时自动运行,只测试了 Ubuntu。

创建脚本文件

1
sudo vim /usr/local/bin/cleanup.sh

写入脚本内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/bin/bash

echo "🔧 开始执行系统清理任务..."

# 记录清理前可用空间(以字节为单位)
before=$(df --output=avail -B1 / | tail -n1 | tr -d '[:space:]')

## 1. APT 缓存
echo "🧹 清理 apt 缓存..."
sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove -y

## 2. 日志文件
echo "🧹 清理系统日志..."
sudo journalctl --vacuum-time=7d # 只保留 7 天日志
sudo find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;

## 3. 临时文件
echo "🧹 清理 /tmp..."
sudo rm -rf /tmp/*

## 4. Snap 老版本(如果使用了 snap)
if command -v snap &>/dev/null; then
echo "🧹 清理 snap 老版本..."
sudo snap list --all | awk '/disabled/{print $1, $2}' | \
while read snapname revision; do
sudo snap remove "$snapname" --revision="$revision"
done
fi

## 5. Docker 清理(安全模式,不删除 volume)
if command -v docker &>/dev/null; then
echo "🧹 清理 Docker..."
sudo docker system prune -af
fi

# 记录清理后可用空间(以字节为单位)
after=$(df --output=avail -B1 / | tail -n1 | tr -d '[:space:]')

# 计算释放的空间(以字节为单位)
released=$((after - before))

if [ "$released" -le 0 ]; then
echo "✨ 系统清理完成!未释放可用空间(可能是并发写入或无可清理项)。"
else
# 转换成合适的单位(释放空间)
if [ "$released" -lt 1024 ]; then
released_human="未释放可用空间"
elif [ "$released" -lt 1048576 ]; then
released_human=$(awk "BEGIN {printf \"%.2f KB\", $released/1024}")
elif [ "$released" -lt 1073741824 ]; then
released_human=$(awk "BEGIN {printf \"%.2f MB\", $released/1024/1024}")
else
released_human=$(awk "BEGIN {printf \"%.2f GB\", $released/1024/1024/1024}")
fi

# 转换成合适的单位(当前可用空间)
if [ "$after" -ge 1073741824 ]; then
after_human=$(awk "BEGIN {printf \"%.2f GB\", $after/1024/1024/1024}")
elif [ "$after" -ge 1048576 ]; then
after_human=$(awk "BEGIN {printf \"%.2f MB\", $after/1024/1024}")
else
after_human=$(awk "BEGIN {printf \"%.2f KB\", $after/1024}")
fi

if [ "$released_human" = "未释放可用空间" ]; then
echo "✨ 系统清理完成!未释放可用空间。"
else
echo "✨ 系统清理完成!释放空间:${released_human}"
echo "💾 当前可用空间:${after_human}"
fi
fi

赋权

1
sudo chmod +x /usr/local/bin/cleanup.sh

手动运行脚本

1
cleanup.sh

定时运行脚本

  • 编辑 crontab
1
sudo crontab -e
  • 周日凌晨 3 点执行一次
1
0 3 * * 0 /usr/local/bin/cleanup.sh >> /var/log/cleanup.log 2>&1

后记

  • 每周日凌晨 3:00 执行脚本
  • 执行过程会记录到 /var/log/cleanup.log
  • 如果需要改频率,只需要调整前面的 0 3 * * 0