搜索结果

×

搜索结果将在这里显示。

🎉 查找大文件:du|find|sort

在 Linux 中查找大文件,核心思路是 “遍历文件系统 + 按大小排序” 。与查找大目录(侧重汇总统计)不同,查找大文件更关注单个文件的体量。

这里为你整理了几种最实用的命令,按推荐优先级排列。


📋 核心命令速查表

使用场景 推荐命令(复制即用) 说明
最常用(全盘扫描前N大) sudo find / -type f -exec du -h {} + 2>/dev/null \| sort -rh \| head -20 万能组合,列出全盘最大的20个文件。
按大小阈值过滤 sudo find / -type f -size +1G -exec ls -lh {} \; 2>/dev/null 只找大于1GB的文件,快速定位“巨型文件”。
当前目录下查找 du -ah . \| sort -rh \| head -20 快速查看当前目录(含子目录)中最大的文件和文件夹,操作最轻量
交互式图形探索 sudo ncdu -x / 强烈推荐!可视化界面,方向键下钻,按d可直接删除。
仅文件名(超快速) sudo find / -type f -size +500M 2>/dev/null 只列出路径,不显示大小,速度极快,适合先“捞”再细查。

  • 实战命令详解

    1. 黄金组合:find + du + sort(全盘扫描)

    这是最标准的万能命令,能递归遍历整个根目录,并按照文件大小从大到小排序。

    # 查找系统中最顶级的 20 个大文件
    sudo find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -20
    • -exec du -h {} + ​:对找到的每个文件执行 du -h 获取大小。
    • 2>/dev/null​:屏蔽权限不足(如 /proc)的报错,保持输出干净。
    • sort -rh​:-r​ 降序(大的在前),-h 识别人类可读单位(K/M/G)。

    进阶优化:若只想查 /var​ 或 /home​,把 / 换成对应路径即可。

    2. 按阈值过滤:只查巨型文件

    如果你知道系统里可能有超大日志(比如超过1G),用 -size 直接过滤效率更高:

    # 查找大于 1GB 的文件,并显示详细信息
    sudo find / -type f -size +1G -exec ls -lh {} \; 2>/dev/null
    
    # 查找大于 500MB 的文件(只列路径)
    sudo find / -type f -size +500M 2>/dev/null
    • -size +1G​ 支持 c​(字节)、k​(KB)、M​(MB)、G(GB)。

    3. 限定当前目录:最快下钻

    如果磁盘告警发生在特定挂载点(比如 /home 满了),没必要扫全盘:

    # 查看 /home 下最大的前 15 个文件(包含子目录)
    sudo du -ah /home | sort -rh | head -15

    注意:du -a会同时列出文件和目录,如果你只想看文件,可以加 grep -v "/$"去掉目录行。

    4. 交互式神器:ncdu

    如果在生产环境,强烈建议安装 ncdu。它扫描后生成一个可交互的树形列表,按大小排序,进入大文件夹就像浏览文件管理器一样直观。

    # 安装(若无)
    # Ubuntu: sudo apt install ncdu
    # CentOS: sudo yum install ncdu
    
    # 扫描根目录(-x 限制只扫当前分区,避免进入 /proc 卡死)
    sudo ncdu -x /

    扫描完成后,按 n​ 可按文件名排序,按 s​ 按大小排序,按 d 直接删除选中的大文件。


  • 高级巡检技巧

    • 1. 排除无关目录(避免报错和卡顿)

    扫描根目录时,/proc​、/sys​、/dev​ 是虚拟文件系统,不仅占空间(显示为0)还容易报错。使用 -path 排除:

    sudo find / -type f -size +100M -not -path "/proc/*" -not -path "/sys/*" -exec ls -lh {} \; 2>/dev/null
    • 2. 查找占用空间但已被删除的文件

    有时候 df​ 显示磁盘满,但 du​ 却找不到大文件,很可能是有进程正在写入一个已删除的文件。

    # 查看被删除但仍被进程占用的文件(这些文件仍在占用磁盘空间)
    sudo lsof | grep deleted

    或者查看 /proc 下的文件描述符:

    sudo ls -l /proc/*/fd/* 2>/dev/null | grep deleted
    • 3. 按文件类型排查

    如果怀疑是核心转储文件(core)或压缩包占满空间:

    # 查找所有 .core 或 .tar.gz 文件并排序
    sudo find / -type f \( -name "*.core" -o -name "*.tar.gz" \) -exec du -h {} + 2>/dev/null | sort -rh

⚠️ 避坑指南

  1. 务必加 sudo​:否则普通用户看不到 /root、其他用户家目录及系统关键目录,会遗漏真正的大文件。
  2. 避开业务高峰期find / -exec du 会消耗大量磁盘 I/O,建议在低峰期执行。
  3. 确认文件后可删除:删除前务必确认文件用途(如老的 Tomcat 日志、数据库备份),用 ls -lh​ 看修改时间,或用 file 命令看文件类型,避免误删系统库文件。

一句话总结:日常巡检优先用 du -ah /path | sort -rh | head -20​ 快速看当前目录;若全盘排查,直接用 sudo find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -20​ 一键搞定。若需要交互式深度分析,直接上 ncdu

阅读:194
发布时间: