当前位置: 代码网 > 服务器>服务器>Linux > Linux脚本实现清理服务器硬盘

Linux脚本实现清理服务器硬盘

2026年07月16日 Linux 我要评论
给你写好了一个安全、好用的一键清理脚本。这个脚本不仅会清理我们刚才排查出的 /root/logs 历史日志和系统邮件,还会顺手清理系统的临时缓存、系统日志,并且绝对不会误删任何正在运行的业务数据。第一

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

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

第一步:创建并部署脚本

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

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

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

vi /root/clean.sh

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

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

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

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

chmod +x /root/clean.sh

脚本完整代码

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

#!/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 /

 以后如何使用

手动运行

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

/root/clean.sh

报错:

[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 目录下,直接运行以下两行命令:

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

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

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

到此这篇关于linux脚本实现清理服务器硬盘的文章就介绍到这了,更多相关linux清理服务器硬盘内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com