写点什么

Linux 服务器磁盘满了?教你快速找到大文件,安全删掉不踩坑!

  • 2025-12-16
    福建
  • 本文字数:2327 字

    阅读完需:约 8 分钟

  1. 磁盘空间检查基础命令 1.1 查看磁盘使用情况

查看所有挂载点的磁盘使用情况

df -h

查看指定目录的磁盘使用情况

df -h /home1.2 查找大文件和目录

查找当前目录下大于 100MB 的文件

find . -type f -size +100M -exec ls -lh {} ;

查找根目录下大于 1GB 的文件

find / -type f -size +1G -exec ls -lh {} ;2. 高级大文件查找方法 2.1 使用 du 命令

查看当前目录下最大的 10 个目录

du -sh * | sort -rh | head -10

查看根目录下最大的 10 个目录

du -sh /* | sort -rh | head -10

查看特定目录下的大文件

du -ah /var/log | sort -rh | head -202.2 综合查找脚本 #!/bin/bash

查找系统中最大的文件和目录

echo "=== 最大的 10 个目录 ==="du -h / 2>/dev/null | sort -hr | head -10


echo -e "\n=== 最大的 10 个文件 ==="find / -type f -size +100M 2>/dev/null | xargs ls -lh | sort -k5 -hr | head -103. 常见大文件类型分析 3.1 日志文件清理

查看日志目录大小

du -sh /var/log/*

清理旧的日志文件(保留最近 7 天)

find /var/log -name "*.log" -mtime +7 -delete

压缩旧日志文件

find /var/log -name "*.log" -mtime +3 -exec gzip {} ;3.2 缓存文件清理

查看缓存目录大小

du -sh /tmp /var/tmp /var/cache/*

清理临时文件

rm -rf /tmp/*rm -rf /var/tmp/*

清理包管理器缓存

yum clean all # CentOS/RHELapt-get clean # Ubuntu/Debian4. 实用清理脚本 4.1 自动化清理脚本 #!/bin/bash

disk_cleanup.sh - 自动清理大文件脚本

LOG_FILE="/var/log/disk_cleanup.log"

记录日志函数

log_message() {echo "1" >> $LOG_FILE}

检查磁盘使用率

check_disk_usage() {local usage=(df / | awk 'NR==2 {print 5}' | sed 's/%//')if [ {usage}%"return 1fireturn 0}

清理日志文件

cleanup_logs() {log_message "开始清理日志文件..."


# 删除超过30天的日志find /var/log -name "*.log" -mtime +30 -delete
# 压缩旧日志find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
log_message "日志清理完成"
复制代码


}

清理临时文件

cleanup_temp() {log_message "开始清理临时文件..."


# 清理过期的临时文件find /tmp -type f -mtime +1 -deletefind /var/tmp -type f -mtime +1 -delete
log_message "临时文件清理完成"
复制代码


}

主执行流程

main() {log_message "=== 开始磁盘清理任务 ==="


if check_disk_usage; then    cleanup_logs    cleanup_temp    log_message "=== 磁盘清理任务完成 ==="else    log_message "磁盘使用率过高,跳过清理操作"fi
复制代码


}


main4.2 定时清理任务

添加到 crontab 中定期执行

每周日凌晨 2 点执行清理

0 2 * * 0 /path/to/disk_cleanup.sh

每天凌晨 3 点检查磁盘使用情况

0 3 * * * df -h | grep -E "(Filesystem|/)" > /tmp/disk_usage.txt5. 安全清理注意事项 5.1 清理前检查

查看文件详细信息,避免误删重要文件

ls -la /var/log/ls -la /tmp/

查看文件权限和所有者

ls -l /var/log/messages5.2 验证清理操作

使用 dry-run 模式预览将要删除的文件

find /var/log -name "*.log" -mtime +7 -print

先备份再删除

cp /var/log/syslog /var/log/syslog.backuprm /var/log/syslog6. 监控和预警 6.1 磁盘监控脚本 #!/bin/bash

disk_monitor.sh - 磁盘监控脚本

THRESHOLD=80EMAIL="admin@example.com"

检查磁盘使用率

check_disks() {df -h | grep -vE '^Filesystem|tmpfs|cdrom' | while read line; dousage=line | awk '{print 5}' | sed 's/%//')partition=(echo line | awk '{print 1}')mount_point=line | awk '{print $6}')


    if [ $usage -gt $THRESHOLD ]; then        echo "警告:$mount_point 磁盘使用率 $usage%"        # 发送邮件通知        echo "磁盘使用率过高,请及时处理" | mail -s "磁盘警告" $EMAIL    fidone
复制代码


}


check_disks6.2 创建监控服务

创建 systemd 服务用于定时监控

cat > /etc/systemd/system/disk-monitor.service << EOF[Unit]Description=Disk Usage MonitorAfter=network.target


[Service]Type=oneshotExecStart=/usr/local/bin/disk_monitor.shUser=root


[Install]WantedBy=multi-user.targetEOF

启用服务

systemctl enable disk-monitor.service7. 常见问题解决 7.1 已删除但仍在使用的文件

查找已删除但仍被进程占用的文件

lsof +L1

重启相关服务释放文件

systemctl restart nginxsystemctl restart httpd7.2 大文件恢复

如果误删了重要文件,可以尝试使用以下方法:

1. 使用 testdisk 或 photorec 恢复

2. 检查是否有备份

3. 检查文件系统日志

journalctl -f8. 最佳实践建议定期监控:设置定期的磁盘使用情况检查备份重要数据:清理前确保重要数据已备份分步清理:先小范围测试,再大规模执行记录操作:详细记录清理过程和结果设置阈值:建立合理的磁盘使用率预警机制通过以上方法,可以有效地管理和维护 Linux 服务器的磁盘空间,确保系统稳定运行。

行业拓展

分享一个面向研发人群使用的前后端分离的低代码软件——JNPF

基于 Java Boot/.Net Core 双引擎,它适配国产化,支持主流数据库和操作系统,提供五十几种高频预制组件,内置了常用的后台管理系统使用场景和实用模版,通过简单的拖拉拽操作,开发者能够高效完成软件开发,提高开发效率,减少代码编写工作。

JNPF 基于 SpringBoot+Vue.js,提供了一个适合所有水平用户的低代码学习平台,无论是有经验的开发者还是编程新手,都可以在这里找到适合自己的学习路径。

此外,JNPF 支持全源码交付,完全支持根据公司、项目需求、业务需求进行二次改造开发或内网部署,具备多角色门户、登录认证、组织管理、角色授权、表单设计、流程设计、页面配置、报表设计、门户配置、代码生成工具等开箱即用的在线服务。

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
Linux 服务器磁盘满了?教你快速找到大文件,安全删掉不踩坑!_伤感汤姆布利柏_InfoQ写作社区