清理服务器硬盘脚本

给你写好了一个安全、好用的一键清理脚本。

这个脚本不仅会清理我们刚才排查出的 /root/logs 历史日志和系统邮件,还会顺手清理系统的临时缓存、系统日志,并且绝对不会误删任何正在运行的业务数据。

🛠️ 第一步:创建并部署脚本

请在服务器上直接执行以下步骤:

1.创建脚本文件: 10秒。

在服务器终端直接运行以下命令,新建一个名为 clean.sh 的文件:

Bash

bash 复制代码
vi /root/clean.sh

2.复制并粘贴脚本内容: 30秒。

按一下键盘上的小写字母 i 进入编辑模式,然后把下方框里的脚本代码完整复制并粘贴 进去。粘贴完成后,按键盘上的 Esc 键,然后输入 :wq 并回车保存退出。

3.赋予脚本执行权限: 10秒。

给脚本加上可执行权限,否则无法直接运行:

Bash

bash 复制代码
chmod +x /root/clean.sh

📄 脚本完整代码

你可以直接复制这段代码粘贴到 /root/clean.sh 中:

Bash

bash 复制代码
#!/bin/bash
# ==========================================
# 脚本名称:服务器一键安全清理脚本
# 适用系统:CentOS / Debian / Ubuntu
# ==========================================

# 确保必须是 root 用户运行
if [ "$EUID" -ne 0 ]; then
  echo -e "\e[31m[错误] 请以 root 用户运行此脚本!\e[0m"
  exit 1
fi

echo -e "\e[35m================================================\e[0m"
echo -e "\e[35m          开始执行服务器安全清理                \e[0m"
echo -e "\e[35m================================================\e[0m"

# 1. 记录清理前的磁盘空间
echo -e "\e[33m[1/5] 正在记录清理前的磁盘空间...\e[0m"
df -h /
echo ""

# 2. 清理 /root/logs 下 1 天前的历史 master-stdout 日志
echo -e "\e[33m[2/5] 正在清理 /root/logs 下的历史日志 (安全保留当天日志)...\e[0m"
LOG_DIR="/root/logs"
if [ -d "$LOG_DIR" ]; then
    # 查找并删除 1 天前修改过的 master-stdout.log.* 文件
    DELETED_COUNT=$(find "$LOG_DIR" -type f -name "master-stdout.log.*" -mtime +0 | wc -l)
    find "$LOG_DIR" -type f -name "master-stdout.log.*" -mtime +0 -delete
    echo -e "\e[32m✔ 已成功清理 $DELETED_COUNT 个历史日志文件。\e[0m"
else
    echo -e "\e[31mℹ 未找到日志目录 $LOG_DIR,跳过此步。\e[0m"
fi

# 3. 清理系统 root 邮件
echo -e "\e[33m[3/5] 正在清空 root 系统邮件 (/var/spool/mail/root)...\e[0m"
MAIL_FILE="/var/spool/mail/root"
if [ -f "$MAIL_FILE" ]; then
    MAIL_SIZE=$(du -sh "$MAIL_FILE" | awk '{print $1}')
    > "$MAIL_FILE"
    echo -e "\e[32m✔ 已成功清空系统邮件 (原大小: $MAIL_SIZE)。\e[0m"
else
    echo -e "\e[32m✔ 未发现系统邮件,跳过此步。\e[0m"
fi

# 4. 清理 systemd journal 历史系统日志 (只保留最近 7 天)
echo -e "\e[33m[4/5] 正在清理 systemd journal 系统日志...\e[0m"
if command -v journalctl >/dev/null 2>&1; then
    journalctl --vacuum-time=7d >/dev/null 2>&1
    echo -e "\e[32m✔ 已清理 7 天前的 journal 系统日志。\e[0m"
else
    echo -e "\e[31mℹ 系统不支持 journalctl,跳过此步。\e[0m"
fi

# 5. 清除系统包管理器缓存 (yum 或 apt)
echo -e "\e[33m[5/5] 正在清除系统安装包缓存...\e[0m"
if command -v yum >/dev/null 2>&1; then
    yum clean all >/dev/null 2>&1
    echo -e "\e[32m✔ YUM 缓存清理完成。\e[0m"
elif command -v apt-get >/dev/null 2>&1; then
    apt-get clean >/dev/null 2>&1
    echo -e "\e[32m✔ APT 缓存清理完成。\e[0m"
fi

# 6. 清理宝塔面板回收站(如果有的话)
RECYCLE_BIN="/.Recycle_bin"
if [ -d "$RECYCLE_BIN" ]; then
    echo -e "\e[33m[额外步骤] 检测到回收站目录,正在清空...\e[0m"
    rm -rf "$RECYCLE_BIN"/*
    echo -e "\e[32m✔ 回收站已彻底清空。\e[0m"
fi

echo -e "\e[35m================================================\e[0m"
echo -e "\e[32m              🎉 垃圾清理完成!🎉                \e[0m"
echo -e "\e[35m================================================\e[0m"

# 7. 展示清理后的空间
echo -e "\e[33m清理后的磁盘空间状态:\e[0m"
df -h /

🚀 以后如何使用?

1. 手动运行

以后你觉得服务器卡了,或者空间不够了,直接登录服务器运行下面这行命令即可:

Bash

bash 复制代码
/root/clean.sh

报错:

bash 复制代码
[root@vm www]# ./clean.sh

-bash: ./clean.sh: /bin/bash^M: bad interpreter: No such file or directory

这个报错非常经典!它的意思是脚本里的换行符是 Windows 格式(CRLF) ,而 Linux 系统只认 Unix 格式(LF) 。

报错里的 ^M 就是多出来的 Windows 回车符,导致 Linux 把解释器识别成了 /bin/bash\r,自然就找不到这个文件了。

解决起来非常简单,只需要用 sed 命令把脚本里的 Windows 换行符替换掉即可。

🛠️ 解决步骤

在当前 /www 目录下,直接运行以下两行命令:

Bash

bash 复制代码
# 1. 过滤掉脚本里的 Windows 换行符(把 \r 删掉)
sed -i 's/\r$//' ./clean.sh

# 2. 重新运行脚本
./clean.sh

瞬间就能搞定,脚本应该可以正常跑起来了!

相关推荐
云-缩影1 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
考虑考虑3 小时前
Posrgresql恢复.backup文件
数据库·后端·postgresql
无奈何杨3 小时前
风控决策系统决策流,策略模式,权重、顺序、投票、最坏
后端
Patrick_Wilson4 小时前
Go 为什么需要 defer?从函数怎么收尾说起
后端·go·编程语言
苏三说技术4 小时前
DeepSeek Harness入驻B站,评论区被干成了大型插件集市!
后端
橙序员小站4 小时前
我一句话让 AI 把公众号工作台搭完了:部署实测记录
后端
Patrick_Wilson5 小时前
从文本输出理解 Go 方法与接口
后端·go·编程语言
QCoding5 小时前
企业级Agent Evaluation实战:Agent能跑就能上线?AI Agent到底怎么测?
后端·spring
苍何6 小时前
让 WorkBuddy 操控浏览器,干活有点猛啊1
后端
IT_陈寒6 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端