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

 更新时间:2026年07月16日 08:44:12   作者:HZ_YZ  
服务器变慢、空间不足,这个一键清理脚本帮你快速清理/root/logs历史日志、系统邮件、临时缓存和系统日志,绝不误删业务数据,跟着教程部署,轻松解决Linux系统空间问题,让服务器运行更流畅

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

这个脚本不仅会清理我们刚才排查出的 /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清理服务器硬盘内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决Ubuntu 16.04下提示boot分区空间不足的办法

    解决Ubuntu 16.04下提示boot分区空间不足的办法

    最近看了看/boot的大小,发现几次升级后,大小不足,所以想扩容,一开始还想用磁盘操作,但上网查询后发现,磁盘操作实在风险太大,特别是双系统的Linux,操作又是很麻烦,后来发现可以删除多余的旧内核来清理/boot,释放空间。下面来看看详细的解决方法吧。
    2017-02-02
  • 关于DNS域名解析服务

    关于DNS域名解析服务

    这篇文章主要介绍了关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Linux jdk安装及环境变量配置教程(jdk-8u144-linux-x64.tar.gz)

    Linux jdk安装及环境变量配置教程(jdk-8u144-linux-x64.tar.gz)

    这篇文章主要介绍了Linux jdk安装及环境变量配置(jdk-8u144-linux-x64.tar.gz),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • 阿里云CentOS挂载新数据盘的方法

    阿里云CentOS挂载新数据盘的方法

    本篇文章主要介绍了阿里云CentOS挂载新数据盘的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 如何对安装Linux的服务器进行缓存清除

    如何对安装Linux的服务器进行缓存清除

    这篇文章主要介绍了如何对安装Linux的服务器进行缓存清除问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Linux中grep和egrep命令详解

    Linux中grep和egrep命令详解

    在本篇文章里小编给大家整理的是关于Linux之grep和egrep命令总结内容,有需要的朋友们参考学习下。
    2019-10-10
  • 预防PHPDDOS的发包攻击别人的方法(iis+linux)

    预防PHPDDOS的发包攻击别人的方法(iis+linux)

    最近很多美国VPS客户被人通过dedecms漏洞等等入侵.导致phpddos 很猖狂,占用大量带宽,影响网站,浪费流量
    2012-04-04
  • 详解Linux中如何释放交换空间swap

    详解Linux中如何释放交换空间swap

    交换内存swap是linux下一个虚拟内存的概念,它是利用磁盘空间虚拟出的一块逻辑内存,用于解决物理内存容量不足的问题,本文就给大家介绍一下在Linux中如何释放交换空间swap,需要的朋友可以参考下
    2023-07-07
  • linux 定时任务详解

    linux 定时任务详解

    本篇文章主要介绍了linux 定时任务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01
  • CentOS 7下部署php7.1和开启MySQL扩展的方法教程

    CentOS 7下部署php7.1和开启MySQL扩展的方法教程

    这篇文章主要给大家介绍了关于CentOS 7下部署php7.1和开启MySQL扩展的方法教程,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07

最新评论