IT疯子技术论坛

 找回密码
 立即注册
查看: 8|回复: 0

[Linux] Linux服务器查找和清理大文件

[复制链接]

62

主题

29

回帖

480

积分

中级会员

Rank: 3Rank: 3

积分
480
 楼主| 发表于 3 天前 | 显示全部楼层 |阅读模式
1. 磁盘空间检查基础命令
1.1 查看磁盘使用情况
  1. # 查看所有挂载点的磁盘使用情况
  2. df -h
  3. # 查看指定目录的磁盘使用情况
  4. df -h /home
复制代码

1.2 查找大文件和目录
  1. # 查找当前目录下大于100MB的文件
  2. find . -type f -size +100M -exec ls -lh {} \;
  3. # 查找根目录下大于1GB的文件
  4. find / -type f -size +1G -exec ls -lh {} \;
复制代码

2. 高级大文件查找方法
2.1 使用du命令
  1. # 查看当前目录下最大的10个目录
  2. du -sh * | sort -rh | head -10
  3. # 查看根目录下最大的10个目录
  4. du -sh /* | sort -rh | head -10
  5. # 查看特定目录下的大文件
  6. du -ah /var/log | sort -rh | head -20
复制代码

2.2 综合查找脚本
  1. #!/bin/bash
  2. # 查找系统中最大的文件和目录
  3. echo "=== 最大的10个目录 ==="
  4. du -h / 2>/dev/null | sort -hr | head -10

  5. echo -e "\n=== 最大的10个文件 ==="
  6. find / -type f -size +100M 2>/dev/null | xargs ls -lh | sort -k5 -hr | head -10
复制代码

3. 常见大文件类型分析
3.1 日志文件清理
  1. # 查看日志目录大小
  2. du -sh /var/log/*
  3. # 清理旧的日志文件(保留最近7天)
  4. find /var/log -name "*.log" -mtime +7 -delete
  5. # 压缩旧日志文件
  6. find /var/log -name "*.log" -mtime +3 -exec gzip {} \;
复制代码

3.2 缓存文件清理
  1. # 查看缓存目录大小
  2. du -sh /tmp /var/tmp /var/cache/*
  3. # 清理临时文件
  4. rm -rf /tmp/*
  5. rm -rf /var/tmp/*
  6. # 清理包管理器缓存
  7. yum clean all    # CentOS/RHEL
  8. apt-get clean    # Ubuntu/Debian
复制代码

4. 实用清理脚本

4.1 自动化清理脚本
  1. #!/bin/bash
  2. # disk_cleanup.sh - 自动清理大文件脚本
  3. LOG_FILE="/var/log/disk_cleanup.log"
  4. # 记录日志函数
  5. log_message() {
  6.     echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
  7. }

  8. # 检查磁盘使用率
  9. check_disk_usage() {
  10.     local usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
  11.     if [ $usage -gt 80 ]; then
  12.         log_message "警告:磁盘使用率过高: ${usage}%"
  13.         return 1
  14.     fi
  15.     return 0
  16. }

  17. # 清理日志文件
  18. cleanup_logs() {
  19.     log_message "开始清理日志文件..."
  20.    
  21.     # 删除超过30天的日志
  22.     find /var/log -name "*.log" -mtime +30 -delete
  23.    
  24.     # 压缩旧日志
  25.     find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
  26.    
  27.     log_message "日志清理完成"
  28. }

  29. # 清理临时文件
  30. cleanup_temp() {
  31.     log_message "开始清理临时文件..."
  32.    
  33.     # 清理过期的临时文件
  34.     find /tmp -type f -mtime +1 -delete
  35.     find /var/tmp -type f -mtime +1 -delete
  36.    
  37.     log_message "临时文件清理完成"
  38. }


  39. # 主执行流程
  40. main() {
  41.     log_message "=== 开始磁盘清理任务 ==="
  42.    
  43.     if check_disk_usage; then
  44.         cleanup_logs
  45.         cleanup_temp
  46.         log_message "=== 磁盘清理任务完成 ==="
  47.     else
  48.         log_message "磁盘使用率过高,跳过清理操作"
  49.     fi
  50. }
  51. main
复制代码

4.2 定时清理任务
  1. # 添加到crontab中定期执行
  2. # 每周日凌晨2点执行清理
  3. 0 2 * * 0 /path/to/disk_cleanup.sh
  4. # 每天凌晨3点检查磁盘使用情况
  5. 0 3 * * * df -h | grep -E "(Filesystem|/)" > /tmp/disk_usage.txt
复制代码

5. 安全清理注意事项
5.1 清理前检查
  1. # 查看文件详细信息,避免误删重要文件
  2. ls -la /var/log/
  3. ls -la /tmp/
  4. # 查看文件权限和所有者
  5. ls -l /var/log/messages
复制代码

5.2 验证清理操作
  1. # 使用dry-run模式预览将要删除的文件
  2. find /var/log -name "*.log" -mtime +7 -print
  3. # 先备份再删除
  4. cp /var/log/syslog /var/log/syslog.backup
  5. rm /var/log/syslog
复制代码

6. 监控和预警
6.1 磁盘监控脚本
  1. #!/bin/bash
  2. # disk_monitor.sh - 磁盘监控脚本
  3. THRESHOLD=80
  4. EMAIL="[email protected]"

  5. # 检查磁盘使用率
  6. check_disks() {
  7.     df -h | grep -vE '^Filesystem|tmpfs|cdrom' | while read line; do
  8.         usage=$(echo $line | awk '{print $5}' | sed 's/%//')
  9.         partition=$(echo $line | awk '{print $1}')
  10.         mount_point=$(echo $line | awk '{print $6}')
  11.         
  12.         if [ $usage -gt $THRESHOLD ]; then
  13.             echo "警告:$mount_point 磁盘使用率 $usage%"
  14.             # 发送邮件通知
  15.             echo "磁盘使用率过高,请及时处理" | mail -s "磁盘警告" $EMAIL
  16.         fi
  17.     done
  18. }
  19. check_disks
复制代码

6.2 创建监控服务
  1. # 创建systemd服务用于定时监控
  2. cat > /etc/systemd/system/disk-monitor.service << EOF
  3. [Unit]
  4. Description=Disk Usage Monitor
  5. After=network.target


  6. [Service]
  7. Type=oneshot
  8. ExecStart=/usr/local/bin/disk_monitor.sh
  9. User=root


  10. [Install]
  11. WantedBy=multi-user.target
  12. EOF


  13. # 启用服务
  14. systemctl enable disk-monitor.service
复制代码

7. 常见问题解决
7.1 已删除但仍在使用的文件
  1. # 查找已删除但仍被进程占用的文件
  2. lsof +L1

  3. # 重启相关服务释放文件,如nginx、httpd
  4. systemctl restart nginx
  5. systemctl restart httpd
复制代码

7.2 大文件恢复
  1. # 如果误删了重要文件,可以尝试使用以下方法:
  2. # 1. 使用testdisk或photorec恢复
  3. # 2. 检查是否有备份
  4. # 3. 检查文件系统日志
  5. journalctl -f
复制代码

通过以上方法,可以有效地管理和维护Linux服务器的磁盘空间,确保系统稳定运行。


来源:SegmentFault
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|IT疯子技术论坛

GMT+8, 2026-1-11 14:53 , Processed in 0.025438 second(s), 4 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表