正确查找大于100mb的文件需用sudo find / -xdev -type f -size +100m -print,其中-xdev防止跨挂载点,-type f排除目录和虚拟文件,-size +100m表示严格大于100mib。

查“大于100MB”的文件,find -size +100M 不能直接用
直接跑 sudo find / -size +100M 很可能卡住、报一堆 No such file or directory,或者返回一堆目录路径甚至 /proc/kcore 这种虚拟文件。这不是命令写错了,而是没加关键约束:
-
-type f:必须加上,否则-size会对目录、符号链接、设备节点都生效——目录的“大小”是它自身元数据占的块数,和实际磁盘占用毫无关系 -
-xdev:必须加上,否则会跨挂载点(比如/boot、/home、/mnt/nas),遇到权限拒绝或未就绪设备就会中断或输出假结果 - 不加
-print或类似动作,部分系统默认不输出(尤其在管道中),建议显式加上
正确写法:sudo find / -xdev -type f -size +100M -print
-size 的单位和符号含义,错一个就差十倍
-size 后面不是字节,也不是十进制 MB,单位后缀区分大小写,+/- 位置决定逻辑——不是“≥”或“≤”,而是严格比较:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
+500M:严格大于 500 MiB(即 500 × 1024 × 1024 字节) -
-500M:严格小于 500 MiB(注意不是 ≤,是纯小于) -
500M:精确等于 500 MiB(几乎不可能命中,别依赖) - 单位:大写
M= MiB,G= GiB,k= KiB;小写k(kilo)是非法后缀,B不合法,MB会被静默忽略单位,退化成按 512 字节块计算,结果偏差百倍 - 想按字节精确控制?用
+1048576c(c 表示字节),比+1M更可靠
要找“100MB 到 500MB 之间”的文件,得组合两个 -size
find 不支持单个 -size 写范围,必须用逻辑连接符。注意:默认是 -a(AND),但显式写出更安全,避免不同版本解析差异:
sudo find /var/log -xdev -type f -size +100M -size -500M -print- 等价于:
sudo find /var/log -xdev -type f -size +100M -and -size -500M -print - 别用
-o(OR)代替,否则逻辑翻车;也别漏掉-xdev和-type f,否则范围结果里混进目录或虚拟文件 - 如果搜索路径下有大量小文件,这个命令仍可能较慢;可先限定深度:
-maxdepth 3
真正占空间最多的文件,find -size 可能完全不准
如果你目标不是“超过某个阈值”,而是“揪出吃掉磁盘最多的那几个文件”,find -size 会漏掉硬链接共享 inode、稀疏文件、加密容器、压缩归档内部文件等情况。此时应该用 du 统计真实磁盘块占用:
-
find /home -xdev -type f -print0 | xargs -0 du -h | sort -hr | head -10:逐个统计每个文件真实占用,再倒序取 Top 10 -
du -sh /var/log/* 2>/dev/null | sort -hr | head -10:快速看 /var/log 下各子项(含目录)总占用 - 注意:
du显示的是磁盘块占用,不是ls -l的逻辑大小;对日志轮转、快照、overlayfs 等场景,du才反映实际压力点
最易被忽略的一点:/proc、/sys、/dev 下的“文件”根本不占磁盘空间,但 find -size 会把它们当真文件算——-xdev 能拦住大部分,但若忘了加,排查时会浪费大量时间确认那些根本不存在的“大文件”。










