From aa0d9f5057ed40924f511b355e4f3085d74f0bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=A1=E8=9B=8E?= Date: Mon, 2 Jun 2025 18:15:37 +0800 Subject: [PATCH] =?UTF-8?q?refactor(bash):=20=E6=9B=B4=E6=96=B0=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E6=B8=85=E7=90=86=E8=84=9A=E6=9C=AC=E5=B9=B6=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=20NAS=20=E7=B3=BB=E7=BB=9F=E4=BF=9D=E6=8A=A4=E6=8E=AA?= =?UTF-8?q?=E6=96=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 README.md 中添加关于 NAS 系统不适用的警告 - 在 clean.sh 脚本中增加 NAS 系统检测和确认步骤 - 优化脚本结构,增加警告提示和确认操作 - 更新脚本中的注释和输出信息,提高用户体验 --- bash/README.md | 6 +++++ bash/clean.sh | 69 +++++++++++++++++++++++--------------------------- 2 files changed, 37 insertions(+), 38 deletions(-) diff --git a/bash/README.md b/bash/README.md index 98062a1..8592c0f 100644 --- a/bash/README.md +++ b/bash/README.md @@ -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 ``` diff --git a/bash/clean.sh b/bash/clean.sh index f0cdfa1..8b5edb4 100644 --- a/bash/clean.sh +++ b/bash/clean.sh @@ -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 "请输入要保留的日志大小(例如:100M,1G):" 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 "==============================" \ No newline at end of file +echo "✅ 系统清理完成!" +echo "=============================="