首页/系统/Linux 运维命令速查/场景:快速定位占用磁盘的大文件
文件与目录76 条

场景:快速定位占用磁盘的大文件

服务器空间去哪儿了:按大小阈值横扫目录,输出排序清单,直奔罪魁祸首。

Linux 运维命令速查系统更新于 2026-10-13

这个场景要解决什么

服务器空间告急时,先用一条命令把大文件揪出来:find 按大小阈值筛选,把字节数和路径一起输出,交给 sort 从大到小排,再用 head 看前几名。关键在于用 -xdev 把扫描限制在当前文件系统内,避免顺着挂载点翻到网络存储或其它磁盘上,那样既慢又会把总量算得没有意义。

基本信息

适用场景磁盘使用率告警,需要快速找出占空间的大文件
核心命令find 加 -size、-xdev、-type f,再交给 sort -rn 与 head
关键选项-size +500M 阈值、-xdev 不跨文件系统、-printf 自定义输出、-mtime 限制时间
口径提醒find 按文件大小统计,与 du 的实际占用口径不完全一致

典型使用场景

  • 磁盘告警处置:快速找出占空间最多的文件,判断能否直接清理
  • 清理前评估:确认是日志、转储文件还是镜像包在吃空间
  • 定期盘点:把大文件清单纳入巡检脚本,观察增长趋势
  • 异常定位:某个服务写出了超大 core 文件或异常临时文件
  • 与 du 交叉核对:目录汇总与文件清单对不上时,两边都看一遍

常用示例

常用示例
find /data -xdev -type f -size +500M -printf '%s %p\n' 2>/dev/null | sort -rn | head -20
find / -xdev -type f -size +1G 2>/dev/null | head -20
find /var -xdev -type f -size +100M -mtime -1 -exec ls -lh {} +   # 只看最近一天新增的大文件
du -x -h --max-depth=1 / | sort -h | tail -20                    # 按目录汇总对照

大小写法

写法含义
-size +500M大于 500 MiB 的文件
-size -100k小于 100 KiB 的文件
-size 1G向上取整后恰好为 1 GiB,实际很少命中
-size +1048576c以字节为单位精确表达阈值
-empty空文件或空目录
-printf 里的 %s 是字节数、%p 是路径。直接输出字节数再交给 sort -rn 排序,比先用 ls 看格式化后的大小准得多;-printf 是 GNU find 的扩展,其它实现可以用 -exec ls -l {} + 替代。
-xdev 只在本文件系统内查找。不加它时 find 会跨进挂载点,扫到网络存储上可能几分钟都出不来,统计出来的总量也会混入别的盘。
删除大文件前先确认没被进程占用:对路径执行 lsof,有输出说明句柄还在,这时删掉目录项空间也不会释放,需要重启对应服务。

易错点

  • 不加 -xdev 会跨挂载点扫描,既慢又让总量口径变得没有意义
  • 权限不足的目录会刷 Permission denied,用 2>/dev/null 屏蔽后要意识到结果并不完整
  • find 的 -size 与 du 的占用口径不同,稀疏文件与硬链接会造成差异,单看一边容易误判
  • -size 只筛文件大小,目录本身不计入,而目录汇总出来的总量可能才是真正的元凶
  • 找到大文件就删之前先确认它不是正在写的日志或数据库文件,删了可能直接引发服务异常

数据来源与参考

  • man 1 find(GNU findutils 手册)
  • man 1 sort(GNU coreutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌