news 2026/7/6 12:22:11

Linux磁盘空间告急?巧用du与find命令组合拳精准定位空间消耗源

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux磁盘空间告急?巧用du与find命令组合拳精准定位空间消耗源

1. 当磁盘空间告急时,先做这些关键检查

那天我正在午休,突然收到服务器告警短信——磁盘使用率超过95%。这种场景对于运维人员来说就像半夜被火警铃吵醒一样刺激。我立刻打开终端连上服务器,开始了这场与磁盘空间的较量。

首先用df -h快速查看整体情况。这个命令就像医院的X光机,能一眼看出哪个分区"病入膏肓":

$ df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 50G 48G 1.2G 98% /

看到根目录只剩1.2G可用空间,我马上想到几个常见"嫌疑犯":日志文件、缓存数据、残留的安装包。但盲目猜测不如科学排查,这时候就该请出我们的黄金搭档——dufind命令。

2. 用du命令快速定位"空间大胃王"

du(disk usage)就像个精明的仓库管理员,能准确统计每个目录占用的空间。我最常用的组合拳是:

$ du -h --max-depth=1 / | sort -hr | head -10 48G / 23G /var 12G /home 8.5G /usr 1.2G /opt

这个命令分解来看:

  • -h:人类可读格式(GB/MB/KB)
  • --max-depth=1:只显示一级子目录
  • sort -hr:按人类可读数值逆序排序
  • head -10:只显示前10条结果

发现/var目录异常庞大后,我继续深入调查:

$ du -h --max-depth=1 /var | sort -hr | head -5 23G /var 18G /var/log 4.5G /var/lib 800M /var/cache

3. find命令精准打击大文件

定位到/var/log这个"嫌犯"后,就该find上场了。它像探雷器一样能精确找出具体的大文件:

$ find /var/log -type f -size +100M -exec ls -lh {} \; -rw-r--r-- 1 root root 2.3G Jun 15 10:23 /var/log/syslog.1 -rw-r--r-- 1 root root 1.8G Jun 14 09:12 /var/log/kern.log.2

这里的关键参数:

  • -type f:只查找文件
  • -size +100M:大于100MB的文件
  • -exec ls -lh {} \;:对找到的文件执行ls -lh命令

更高级的用法是结合xargs处理大量文件:

$ find /var/log -type f -size +500M | xargs ls -lhS

4. 实战中的组合技与避坑指南

在实际工作中,我总结出几个高效组合技:

组合技一:快速定位并删除过期日志

# 查找7天前且大于100M的日志文件 $ find /var/log -name "*.log" -mtime +7 -size +100M -exec rm -v {} \;

组合技二:统计目录下各类文件的空间占用

$ find /var/log -type f -name "*log*" -exec du -h {} + | sort -hr

踩过的坑也不少:

  1. 权限问题:系统目录需要sudo权限,但谨慎使用sudo rm
  2. 硬链接陷阱:用ls -i查看inode号,避免删除被多个硬链接引用的文件
  3. 服务锁定文件:删除前用lsof | grep filename检查是否有进程正在使用

5. 进阶技巧:自动化监控与清理

对于经常爆满的服务器,我通常会设置自动化脚本。比如这个每日检查的cron job:

#!/bin/bash THRESHOLD=90 CURRENT=$(df / | awk '{print $5}' | tail -1 | sed 's/%//') if [ $CURRENT -gt $THRESHOLD ]; then LOG_FILE="/tmp/disk_cleanup_$(date +%Y%m%d).log" echo "【$(date)】磁盘使用率${CURRENT}%,开始清理..." >> $LOG_FILE find /var/log -name "*.gz" -mtime +30 -delete >> $LOG_FILE journalctl --vacuum-size=200M >> $LOG_FILE docker system prune -f >> $LOG_FILE fi

6. 特殊情况处理:那些年遇到的奇葩案例

曾经有台服务器/var目录占用异常,但用常规方法找不到大文件。最后发现是某个docker容器的日志文件被误配置为直接写入主机系统,而且文件被删除后空间仍未释放——因为进程还在持有文件描述符。解决方法:

# 找出持有已删除文件的进程 $ lsof +L1 # 然后重启相关服务 $ systemctl restart service_name

另一个案例是某次/tmp目录被占满,发现是某个Python脚本不断生成临时文件却未清理。这种时候可以用find /tmp -type f -user username快速定位用户文件。

7. 预防胜于治疗:日常维护建议

根据多年运维经验,我总结出这些预防措施:

  1. 日志轮转:配置logrotate对关键日志进行自动切割和压缩
  2. 监控预警:设置Prometheus或Zabbix监控磁盘空间
  3. 定期清理:对/tmp、缓存目录设置自动清理策略
  4. 容器管理:docker和k8s环境要特别注意日志和临时文件

比如配置logrotate示例:

# /etc/logrotate.d/nginx /var/log/nginx/*.log { daily rotate 30 compress missingok notifempty sharedscripts postrotate /usr/bin/systemctl reload nginx > /dev/null endscript }

8. 当常规方法失效时的终极武器

如果上述方法都无效,可能需要使用更底层的工具:

  1. 检查隐藏空间dfdu结果不一致时,可能是文件被删除但未释放
    # 查看已删除但未释放的文件 $ lsof | grep deleted
  2. 检查inode耗尽:有时空间足够但inode用尽
    $ df -i
  3. 使用ncdu可视化工具:交互式查看磁盘使用情况
    $ ncdu /var
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 12:21:45

Ubuntu 系统性能监控工具全览:从命令行到图形界面的实战指南

1. Ubuntu性能监控工具全景图刚接触Ubuntu系统管理时,最让我头疼的就是服务器突然变慢却找不到原因。后来才发现,用好性能监控工具就像给系统装了X光机,所有问题一目了然。Ubuntu生态中的监控工具大致可以分为三类:命令行三剑客是…

作者头像 李华
网站建设 2026/7/6 12:20:23

MacBook外接显示器进阶指南:从基础连接到高效多屏工作流

1. 基础连接与显示器设置第一次给MacBook接外接显示器时,我盯着那堆接口线材直发懵。现在市面上常见的MacBook接口主要是Thunderbolt和USB-C,而显示器接口可能是HDMI、DP或者老式的VGA。这里有个实用建议:买线材时直接选双头Type-C的雷电4线&…

作者头像 李华
网站建设 2026/7/6 12:19:02

Knife4j:Spring Boot API 文档增强利器

1. 什么是 Knife4j? Knife4j 是一款基于 Swagger(OpenAPI)的 API 文档增强工具,专为 Java 开发者设计,尤其深度适配 Spring Boot 和 Spring Cloud 生态。它在前端 UI 界面、离线文档导出、接口调试体验等方面对原生 S…

作者头像 李华
网站建设 2026/7/6 12:18:32

Linux定时任务进阶:从分钟级调度到复杂时间表达式实战

1. 从基础到进阶:Crontab时间表达式完全指南刚接触Linux定时任务时,很多人只会用*/5 * * * *这样的简单表达式。但当你需要实现"每周三上午9点到11点,每隔7分钟执行一次"这样的复杂需求时,就不得不深入了解crontab的时间…

作者头像 李华
网站建设 2026/7/6 12:15:59

Linux ACL 权限管理实战:3个典型场景下的 setfacl/getfacl 命令详解

Linux ACL 权限管理实战:3个典型场景下的 setfacl/getfacl 命令详解在传统的Linux权限模型中,我们通常使用chmod和chown命令来管理文件和目录的权限。这种基于用户(user)、组(group)和其他人(other)的UGO权限模型虽然简单易用,但在复杂的多用…

作者头像 李华
网站建设 2026/7/6 12:15:14

Linux df/du 命令实战:5分钟定位磁盘空间占用95%的根因(附排查脚本)

Linux磁盘空间快速排查实战:从基础命令到自动化脚本当服务器磁盘空间告急时,系统管理员往往需要在最短时间内定位问题根源。本文将带你从基础命令开始,逐步构建一套完整的磁盘空间排查体系,最终形成一个自动化分析脚本&#xff0c…

作者头像 李华