Files
script/bash/clean.sh
牡蛎 63d62f37a6 docs(cleaning): 更新系统清理脚本和网站配置文档
- 简化了 clean.sh 脚本的注释
- 更新了 37point2.cn 网站配置的安装步骤,增加了创建目录的指令
- 调整了 37point2.cn 网站配置文件的下载顺序,先下载 index.html 再下载 nginx.conf
2025-06-05 10:53:40 +08:00

189 lines
5.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Linux 系统清理脚本
# ===============================
# !!! 警告 !!!
# 本脚本不适用于 NAS 系统。
# 如果你在 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 'zos' /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 系统,继续执行可能导致系统损坏!"
exit 1
fi
# 检查是否以 root 身份运行
if [ "$EUID" -ne 0 ]; then
echo "请使用 sudo 或以 root 身份运行此脚本。"
exit 1
fi
echo "=============================="
echo " Linux 系统清理脚本 "
echo "=============================="
# 1. 显示系统信息
echo ""
echo "系统信息:"
# 获取当前 Linux 发行版
if [ -f /etc/os-release ]; then
. /etc/os-release
distro=$NAME
else
distro=$(uname -s)
fi
echo "操作系统:$distro"
# 获取登录的用户名
username=$(logname)
echo "登录用户名:$username"
# 获取 CPU 数量
cpu_count=$(nproc)
echo "CPU 数量:$cpu_count"
# 获取内存大小和使用率
total_mem=$(free -h | awk '/Mem:/ {print $2}')
used_mem=$(free -h | awk '/Mem:/ {print $3}')
mem_usage=$(free | awk '/Mem:/ {printf("%.2f"), $3/$2 * 100}')
echo "内存大小:$total_mem"
echo "已用内存:$used_mem ($mem_usage%)"
# 获取硬盘大小和使用率
disk_total=$(df -h / | awk 'NR==2 {print $2}')
disk_used=$(df -h / | awk 'NR==2 {print $3}')
disk_usage=$(df -h / | awk 'NR==2 {print $5}')
echo "硬盘总容量:$disk_total"
echo "已用硬盘:$disk_used ($disk_usage)"
echo "=============================="
# 2. 清理旧的内核包和残留的配置文件
echo ""
echo "步骤 1清理旧的内核包和残留的配置文件"
# 获取当前正在运行的内核版本
current_kernel=$(uname -r)
echo "当前正在运行的内核版本:$current_kernel"
# 获取已安装的内核包列表
installed_kernels=$(dpkg --list | grep 'linux-image-[0-9]' | awk '/^ii/{print $2}')
echo "已安装的内核包:"
echo "$installed_kernels"
# 初始化要移除的内核包列表
remove_kernels=()
# 筛选需要移除的旧内核包
for kernel in $installed_kernels; do
if [[ "$kernel" != *"$current_kernel"* ]]; then
remove_kernels+=("$kernel")
fi
done
# 显示将要移除的内核包
if [ ${#remove_kernels[@]} -eq 0 ]; then
echo "没有需要移除的旧内核。"
else
echo "将要移除的旧内核包:"
for kernel in "${remove_kernels[@]}"; do
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 目录
echo ""
echo "步骤 2清理 /tmp 目录下的临时文件"
read -p "是否清理 /tmp 目录下的所有文件NAS系统请勿执行[y/N]: " confirm_tmp
if [[ "$confirm_tmp" =~ ^[Yy]$ ]]; then
echo "正在清理 /tmp 目录..."
rm -rf /tmp/*
echo "/tmp 目录已清理。"
else
echo "已跳过 /tmp 目录的清理。"
fi
# 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 缓存..."
apt clean
echo "APT 缓存已清理。"
else
echo "已跳过 APT 缓存的清理。"
fi
# 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 "正在清理用户缓存目录..."
rm -rf "$user_home/.cache/*"
echo "用户缓存目录已清理。"
else
echo "已跳过用户缓存目录的清理。"
fi
# 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 日志的清理。"
fi
else
echo "未找到 /var/log/journal 目录,可能未启用持久化日志。"
fi
echo ""
echo "✅ 系统清理完成!"
echo "=============================="