前言
一个简单的脚本用来清理磁盘空间,由 ChatGPT 创作,可以手动运行或者定时自动运行,只测试了 Ubuntu 和Debian。
创建脚本文件
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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| #!/bin/bash
# ========================== # 🔧 Debian/Ubuntu 系统清理脚本(带进度和释放百分比) # 自动清理缓存、日志、临时文件、Docker、Snap 老版本及用户缓存 # ==========================
# 检查是否以 root 执行 if [ "$EUID" -ne 0 ]; then echo "⚠️ 请使用 root 用户或 sudo 执行本脚本!" exit 1 fi
# 获取清理前可用空间 before=$(df --output=avail -B1 / | tail -n1 | tr -d '[:space:]') total_space=$(df --output=size -B1 / | tail -n1 | tr -d '[:space:]') # 总磁盘容量
# ---------- 1. APT ---------- apt-get update -qq apt-get clean -qq apt-get autoclean -qq apt-get autoremove -y -qq
# ---------- 2. 系统日志 ---------- command -v journalctl &>/dev/null && journalctl --vacuum-time=7d || true find /var/log -type f -name "*.log" -exec truncate -s 0 {} \; 2>/dev/null || true
# ---------- 3. 清理函数(带进度百分比) ---------- clean_dir() { local dir="$1" [ -d "$dir" ] || return local files=("$dir"/*) local total=${#files[@]} [ "$total" -eq 0 ] && return local count=0 for f in "${files[@]}"; do rm -rf "$f" 2>/dev/null || true count=$((count + 1)) percent=$((count * 100 / total)) echo -ne "\r⏳ 清理 $dir: ${percent}%" done echo -ne "\r⏳ 清理 $dir: 100%\n" }
# ---------- 4. 临时文件 ---------- clean_dir /tmp clean_dir /var/tmp
# ---------- 5. Snap 老版本 ---------- if command -v snap &>/dev/null; then snaps=($(snap list --all | awk '/disabled/{print $1":"$2}')) total=${#snaps[@]} [ "$total" -gt 0 ] && echo "⏳ 清理 Snap 老版本..." count=0 for s in "${snaps[@]}"; do snapname="${s%%:*}" revision="${s##*:}" snap remove "$snapname" --revision="$revision" &>/dev/null || true count=$((count + 1)) percent=$((count * 100 / total)) echo -ne "\r⏳ 清理 Snap: ${percent}%" done [ "$total" -gt 0 ] && echo -e "\r⏳ 清理 Snap: 100%" fi
# ---------- 6. Docker ---------- command -v docker &>/dev/null && docker system prune -af &>/dev/null || true
# ---------- 7. 用户缓存 ---------- for user_home in /root /home/*; do clean_dir "$user_home/.cache" clean_dir "$user_home/.local/share/Trash" done
# ---------- 输出结果 ---------- after=$(df --output=avail -B1 / | tail -n1 | tr -d '[:space:]') released=$((after - before))
format_size() { local bytes=$1 if [ "$bytes" -lt 1024 ]; then echo "${bytes} B" elif [ "$bytes" -lt 1048576 ]; then awk "BEGIN {printf \"%.2f KB\", $bytes/1024}" elif [ "$bytes" -lt 1073741824 ]; then awk "BEGIN {printf \"%.2f MB\", $bytes/1024/1024}" else awk "BEGIN {printf \"%.2f GB\", $bytes/1024/1024/1024}" fi }
# 计算释放占比 released_percent=$(awk "BEGIN {printf \"%.2f\", $released*100/$total_space}")
if [ "$released" -le 0 ]; then echo "✨ 系统清理完成!未释放可用空间。" else echo "✨ 系统清理完成!释放空间:$(format_size $released) (${released_percent}%) 💾 当前可用空间:$(format_size $after)" fi
|
赋权
1
| sudo chmod +x /usr/local/bin/cleanup.sh
|
手动运行脚本
定时运行脚本
1
| 0 3 * * 0 /usr/local/bin/cleanup.sh >> /var/log/cleanup.log 2>&1
|
后记
- 每周日凌晨 3:00 执行脚本
- 执行过程会记录到 /var/log/cleanup.log
- 如果需要改频率,只需要调整前面的 0 3 * * 0