Linux 磁盘满了,怎么找出最占空间的目录?

用 du 定位最占空间的目录,用 ncdu 钻进去清理大户,再量一次确认磁盘空间已经回收。

Linuxncdu 磁盘分析清理文件文本磁盘诊断低风险
对已经写满的那个文件系统只往下量一层并按大小排序,排在最后的那个子目录就是最占空间的地方,从它开始往下查。

快速开始

磁盘写满,通常不是因为某一个巨大的文件,而是几个目录悄悄长大。删之前先量:找出是哪个目录占了空间,再钻进去,最后才动手删。这篇指南用 du 画地图,用 ncdu 动手术,最后再列一次大小,证明空间确实回收了。

症状

?df -h 显示某个文件系统接近或已经是 100%,写入开始报 “No space left on device”,装包、日志轮转、备份、容器都会中断,甚至无法登录或更新。

量出每个子目录的大小并排序

从真正写满的那个挂载点开始(df -h 输出里的第一列),只往下量一层,就能看出是哪些顶层目录占了空间。结果是从小到大排序的,所以真正的大户排在最后。占了总量一大半的那个目录就是目标,其余小的直接忽略。

统计每个直接子目录的大小,并从小到大排序,最大的目录会排在最下面。

命令
$ du -h --max-depth=1 . | sort -h

钻进最大的目录,删掉真正占地方的东西

ncdu 把同样的数字变成一棵可以浏览的树:进入最大的那个目录,按大小排序,一层层往下走,直到看见真正的文件而不是下一层目录。在 ncdu 里删除是立即生效且不可恢复的,确认之前先看清屏幕顶部显示的路径。优先清缓存、轮转日志、旧内核、废弃的容器层和你自己的下载,而不是认不出来的系统目录。如果没装 ncdu,用发行版的仓库装一个即可,包很小也很安全。

ncdu 扫描目录树后可以按大小浏览、逐层下钻,并一键删除占空间的文件,不用再反复 du 加 sort。

命令
$ ncdu /

再量一次,确认空间真的回来了

对同一个目录再列一次大小,并倒序排列,把最大的条目放在最前面。如果原来的头号大户已经掉出榜首,而之前写满的文件系统重新有了可用空间,说明清理生效了。如果还是同一个目录排在第一位,说明你只删掉了它里面的某个子目录,回去再往下钻一层。

用 GNU sort 的 -h 选项在 Linux 上对 du/df/ls -lh 的输出按真实大小排序。

命令
$ du -h | sort -h -r | head -20
!删错目录会把系统弄坏——不要动 /usr、/var/lib、/etc、/boot,以及根目录下任何你认不出来的东西。ncdu 里的删除是永久的,不是回收站。优先清缓存、旧日志、软件包缓存和你自己的数据,并且用普通用户身份操作,不要用 root。

如何确认已解决

清理后再量一次同一个目录:原先最大的几个子目录应该明显变小,df -h 里那个写满的文件系统应该已经出现可用空间。

来源

  • du(1) — estimate file space usage
    man7.org · technical · 2026-09-17
    依据: The du man page documents '--max-depth=N' to limit the depth of directory reporting and '-h' for human-readable sizes.
  • ncdu(1) - Linux manual page
    Ubuntu Manpages · technical · 2026-09-17
    依据: ncdu is a curses-based disk usage analyzer; pressing d within the browser deletes the selected file or directory, and -o exports the scan.
  • sort(1) — Arch Linux manual
    Arch Linux · technical · 2026-09-17
    依据: -h, --human-numeric-sort compares human-readable numbers (e.g. 2K 1G); -n numeric; -r reverse; -t/-k field options
  • sort(1P) — POSIX manual page
    man7.org · technical · 2026-09-17
    依据: POSIX documents -n numeric comparison and key selection via -k

最后验证: 2026-09-22

相关指南