随着时间的推移,磁盘驱动器可能会积累大量不必要的文件,占用大量磁盘空间。通常,Linux 系统会因大型日志或备份文件而耗尽磁盘空间。

本教程介绍如何使用 find 和 du 命令查找 Linux 系统中的最大文件和目录。

要以交互方式构建大小搜索,请试用我们的 find 命令构建器:设置大小阈值并复制完成的命令。

快速参考

如需可打印的快速参考,请参阅 Find 备忘单。

命令说明
find / -xdev -type f -size +100M查找大于 100 MiB 的文件
find / -xdev -type f -size +1G查找大于 1 GiB 的文件
find . -type f -size +50M -exec ls -lh {} +列出大于 50 MiB 的文件并显示详细信息
du -ahx . | sort -rh | head -10最大的 10 个文件和目录
du -hsx * | sort -rh | head -10当前目录中最大的 10 个项目
ncdu /以交互方式浏览磁盘使用情况

使用 find 命令查找大文件

find 命令是 Linux 系统管理员工具包中最强大的工具之一。它允许您根据不同的条件(包括文件大小)搜索文件和目录。

例如,要在根文件系统中搜索大于 100 MiB 的文件,请运行以下命令:

终端
sudo find / -xdev -type f -size +100M
信息将 / 替换为您要搜索最大文件的目录路径。

输出将显示文件列表,不带任何附加信息:

输出
/var/lib/libvirt/images/fedora-42-desktop_default.img
/var/lib/libvirt/images/noble64_default.img
/var/lib/libvirt/images/win11.qcow2
/var/lib/libvirt/images/debian-13_default.img
/var/lib/libvirt/images/ubuntu-24-04-desktop_default.img
/var/lib/libvirt/images/rocky-9_default.img

-size 选项接受以下后缀:

  • b:512 字节块(默认)
  • c:字节
  • w:双字节字
  • k:Kibibyte(KiB)
  • M:Mebibyte(MiB)
  • G:Gibibyte(GiB)

使用 + 表示“大于”,使用 - 表示“小于”。例如,-size +1G 查找大于 1 GiB 的文件。当省略后缀时,find 计数 512 字节块而不是字节,因此 -size +100 匹配大于 50 KiB(51,200 字节)的文件,而不是 100 字节。

按大小排序大文件

find 命令还可以与 ls 或 sort 等其他工具组合使用,以显示找到文件的详细信息。

在以下示例中,我们使用 -exec 对每个找到的文件运行 ls -lh,然后将输出通过管道传递给 sort,以根据第 5 列(即文件大小)进行排序:

终端
sudo find / -xdev -type f -size +100M -exec ls -lh {} + | sort -k5,5 -h -r

输出将如下所示:

输出
-rw-------  1 root   root    40G Jan  5 14:12 /var/lib/libvirt/images/win11.qcow2
-rw-------  1 root   root   3.7G Jan  7 22:12 /var/lib/libvirt/images/debian-13_default.img
-rw-------  1 root   root   1.5G Dec 30 07:46 /var/lib/libvirt/images/fedora-42-desktop_default.img
-rw-------  1 root   root   999M Jan  5 14:43 /var/lib/libvirt/images/ubuntu-24-04-desktop_default.img
-rw-------  1 root   root   562M Dec 31 07:38 /var/lib/libvirt/images/rocky-9_default.img
-rw-------  1 root   root   378M Jan  7 22:26 /var/lib/libvirt/images/noble64_default.img

如果输出包含大量行,您可以使用 head 命令仅打印前 10 行:

终端
sudo find / -xdev -type f -size +100M -exec ls -lh {} + | sort -k5,5 -h -r | head

让我们分解一下这条命令:

  • find / -xdev -type f -size +100M - 仅在根文件系统(/)上搜索大于 100 MiB(-size +100M)的文件(-type f),不进入其他文件系统(-xdev)。
  • -exec ls -lh {} + - 对找到的文件运行 ls -lh。其中 {} 会被替换为文件名,+ 将多个文件传递给一次 ls 调用。
  • sort -k5,5 -h -r - 基于第 5 列(-k5,5)对行进行排序,以人类可读格式比较值(-h),并反转结果(-r)。
  • head - 仅打印管道输出的前 10 行。

find 命令附带许多强大的选项。例如,您可以搜索超过 x 天的大文件、具有特定扩展名的大文件,或属于特定用户的大文件。

使用 du 命令查找大文件和目录

du 命令用于估算文件空间使用量,特别适用于查找消耗大量磁盘空间的目录和文件。

以下命令将打印最大的文件和目录:

终端
du -ahx . | sort -rh | head -5

第一列包含大小,第二列是文件名:

输出
55G	.
24G	./.vagrant.d/boxes
24G	./.vagrant.d
13G	./Projects
5.2G	./.minikube

以下是每个部分的含义:

  • du -ahx . - 估算当前工作目录(.)中的磁盘空间使用量,同时统计文件和目录(-a),以人类可读格式打印大小(-h),并跳过不同文件系统上的目录(-x)。
  • sort -rh - 以人类可读格式比较值(-h)并对行进行排序,反转结果(-r)。
  • head -5 - 仅打印管道输出的前五行。

汇总目录中的每个项目

-a 选项会为每个文件打印一行,在繁忙的系统中这可能会增长到数千行。当您只想知道哪个顶级项目最占用空间时,请使用 -s 为每个参数打印一个总计:

终端
du -hsx * | sort -rh | head -10

输出可能如下所示:

输出
13G	Projects
2.1G	Downloads
940M	Videos
420M	Documents
102M	Pictures

现在每一行代表一个顶级项目。对于目录,大小包括其下方的所有内容,因此可以清楚接下来该查找哪里。默认情况下,shell 不会将 * 扩展为隐藏条目。在 Bash 中,在启用 dotglob 和 nullglob 的子 shell 中运行命令,以包含点文件和点目录,而不会将不匹配的模式传递给 du:

终端
(shopt -s dotglob nullglob; du -hsx -- * | sort -rh | head -10)

一旦您知道哪个目录最占用空间,就在该目录内运行相同的命令,并重复直到找到值得删除的文件。

du 命令还有许多其他选项可用于优化磁盘空间使用量的输出。

故障排除

find 返回许多 Permission denied 消息
在适当的情况下使用 sudo 运行命令,或者如果您只需要结果列表,可以使用 2>/dev/null 来屏蔽权限错误。

结果包含来自您不想扫描的挂载驱动器的文件
使用 -xdev 保持在当前文件系统上,并避免遍历其他挂载点。

在大型目录上扫描速度太慢
在扫描 / 之前,从更窄的路径(/var、/home 或项目目录)开始。您也可以提高大小阈值以减少结果量。

输出过于冗杂,难以快速解读
通过管道传递给 sort -rh | head -n 10,以首先关注最大的条目。

常见问题解答

如何查找大于特定大小的文件?
使用带有 -size 选项的 find 命令。例如,find / -xdev -type f -size +500M 查找所有大于 500 MiB 的文件。后缀 k、M 和 G 分别代表 kibibyte、mebibyte 和 gibibyte。

在查找大文件时,find 和 du 有什么区别?
find 命令定位符合大小阈值的单个文件。du 命令计算目录使用的总磁盘空间,这有助于识别空间消耗在哪里,即使没有单个文件非常大。

如何查找最近 7 天内修改过的大文件?
组合 -size 和 -mtime 选项:find / -xdev -type f -size +100M -mtime -7。-mtime -7 标志匹配最近 7 天内修改过的文件。

有没有用于查找大文件的交互式工具?
有的。ncdu(NCurses 磁盘用量)工具提供了基于文本的交互式磁盘使用视图。通过包管理器安装它(sudo apt install ncdu 或 sudo dnf install ncdu),然后运行 ncdu / 即可按大小浏览文件系统。