随着时间的推移,磁盘驱动器可能会积累大量不必要的文件,占用大量磁盘空间。通常,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 / 即可按大小浏览文件系统。