refactor(bash): 更新系统清理脚本并增加 NAS 系统保护措施

- 在 README.md 中添加关于 NAS 系统不适用的警告
- 在 clean.sh 脚本中增加 NAS 系统检测和确认步骤
- 优化脚本结构,增加警告提示和确认操作
- 更新脚本中的注释和输出信息,提高用户体验
This commit is contained in:
2025-06-02 18:15:37 +08:00
parent 899dc42448
commit aa0d9f5057
2 changed files with 37 additions and 38 deletions

View File

@@ -26,6 +26,12 @@ curl -sSL https://i.sugarscat.cn/me/script/-/raw/main/bash/init-ali.sh | bash
### 系统清理脚本
> [!CAUTION]
>
> **删库警告**
>
> 该脚本不适合 NAS 系统使用,部分 NAS 的磁盘挂载点在 `/tmp` 目录下,该脚本会清理掉 NAS 的数据。
```bash
curl -sSL https://i.sugarscat.cn/me/script/-/raw/main/bash/clean.sh | bash
```

View File

@@ -1,17 +1,33 @@
#!/bin/bash
# Linux 系统清理脚本
# Linux 系统清理脚本(含 NAS 系统识别与确认)
# ===============================
# 功能:
# 1. 显示系统信息
# 2. 清理旧的内核包和残留的配置文件
# 3. 清理 /tmp 目录下的临时文件
# 4. 清理 APT 缓存目录 /var/cache/apt/archives
# 5. 清理用户缓存目录 ~/.cache
# 6. 清理 systemd 日志 /var/log/journal
# !!! 警告 !!!
# 本脚本不适用于 NAS 系统(如 Synology DSM、TrueNAS、OpenMediaVault 等)。
# 如果你在 NAS 上运行,可能会造成系统损坏!
# 请谨慎操作!
# ===============================
# 检查是否为 NAS 系统的特征
nas_flag=0
if grep -qi 'synology' /etc/os-release 2>/dev/null || \
grep -qi 'freenas' /etc/os-release 2>/dev/null || \
grep -qi 'truenas' /etc/os-release 2>/dev/null || \
grep -qi 'openmediavault' /etc/os-release 2>/dev/null; then
nas_flag=1
fi
if [ "$nas_flag" -eq 1 ]; then
echo "⚠️ 警告:检测到系统可能是 NAS 系统。"
echo "此脚本不适用于 NAS 系统,继续执行可能导致系统损坏!"
read -p "如果你确认要继续执行,请输入 yes否则将中止: " confirm_nas
if [[ "$confirm_nas" != "yes" ]]; then
echo "已取消执行。"
exit 1
fi
fi
# 检查是否以 root 身份运行
if [ "$EUID" -ne 0 ]; then
echo "请使用 sudo 或以 root 身份运行此脚本。"
@@ -91,35 +107,28 @@ else
echo "$kernel"
done
# 提示用户确认
read -p "是否确认移除以上内核包?[y/N]: " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
echo "正在移除旧内核包..."
apt remove --purge -y "${remove_kernels[@]}"
echo "自动清理不需要的依赖项..."
apt autoremove --purge -y
echo "更新 GRUB 引导菜单..."
update-grub
echo "旧内核包已成功移除。"
else
echo "已跳过旧内核包的清理。"
fi
fi
# 清理残留的配置文件
echo "正在清理残留的配置文件..."
dpkg -l | awk '/^rc/{print $2}' | xargs dpkg --purge
echo "残留的配置文件已清理。"
# 3. 清理 /tmp 目录下的临时文件
# 3. 清理 /tmp 目录
echo ""
echo "步骤 2清理 /tmp 目录下的临时文件"
# 提示用户确认
read -p "是否清理 /tmp 目录下的所有文件?[y/N]: " confirm_tmp
read -p "是否清理 /tmp 目录下的所有文件NAS系统请勿执行[y/N]: " confirm_tmp
if [[ "$confirm_tmp" =~ ^[Yy]$ ]]; then
echo "正在清理 /tmp 目录..."
rm -rf /tmp/*
@@ -128,15 +137,11 @@ else
echo "已跳过 /tmp 目录的清理。"
fi
# 4. 清理 APT 缓存目录 /var/cache/apt/archives
# 4. 清理 APT 缓存
echo ""
echo "步骤 3清理 APT 缓存目录 /var/cache/apt/archives"
# 显示当前缓存占用空间
apt_cache_size=$(du -sh /var/cache/apt/archives | awk '{print $1}')
echo "APT 缓存当前占用空间:$apt_cache_size"
# 提示用户确认
read -p "是否清理 APT 缓存?这将删除已下载的包文件。[y/N]: " confirm_apt
if [[ "$confirm_apt" =~ ^[Yy]$ ]]; then
echo "正在清理 APT 缓存..."
@@ -146,18 +151,12 @@ else
echo "已跳过 APT 缓存的清理。"
fi
# 5. 清理用户缓存目录 ~/.cache
# 5. 清理用户缓存
echo ""
echo "步骤 4清理用户缓存目录 ~/.cache"
# 获取用户的主目录
user_home=$(eval echo "~$SUDO_USER")
# 显示当前缓存占用空间
user_cache_size=$(du -sh "$user_home/.cache" 2>/dev/null | awk '{print $1}')
echo "用户缓存目录当前占用空间:$user_cache_size"
# 提示用户确认
read -p "是否清理用户缓存目录 ~/.cache[y/N]: " confirm_user_cache
if [[ "$confirm_user_cache" =~ ^[Yy]$ ]]; then
echo "正在清理用户缓存目录..."
@@ -167,24 +166,18 @@ else
echo "已跳过用户缓存目录的清理。"
fi
# 6. 清理 systemd 日志 /var/log/journal
# 6. 清理 systemd 日志
echo ""
echo "步骤 5清理 systemd 日志 /var/log/journal"
# 显示当前日志占用空间
journal_size=$(du -sh /var/log/journal 2>/dev/null | awk '{print $1}')
echo "systemd 日志当前占用空间:$journal_size"
if [ -d "/var/log/journal" ]; then
# 提示用户确认
read -p "是否清理 systemd 日志?[y/N]: " confirm_journal
if [[ "$confirm_journal" =~ ^[Yy]$ ]]; then
echo "请输入要保留的日志大小例如100M1G"
read -p "保留大小: " journal_limit
echo "正在清理 systemd 日志,保留大小为 $journal_limit..."
journalctl --vacuum-size="$journal_limit"
echo "systemd 日志已清理。"
else
echo "已跳过 systemd 日志的清理。"
@@ -194,5 +187,5 @@ else
fi
echo ""
echo "系统清理完成!"
echo "=============================="
echo "系统清理完成!"
echo "=============================="