Linux 用 du 和 sort 定位磁盘占用异常的实操步骤

AI智能摘要
磁盘空间告急时,盲目删除文件可能误伤系统或业务数据。文章给出一套稳妥流程:先用 df -h 确认紧张分区,再用 du -xhd1 逐层定位大目录,结合 sort -hr 与 head -n 30 筛出重点文件,并提醒权限、隐藏目录及 df 与 du 统计差异。找到异常占用后,如何核对路径和用途再决定清理?
— 此摘要由AI分析文章内容生成,仅供参考。

磁盘空间不足时,先不要急着删除文件。更稳妥的做法是先确认哪个分区接近用满,再用 du 从目录层级逐步缩小范围,最后筛选出占用较大的文件或目录。下面这套流程适合在 Linux 终端中直接执行。

先确认哪个分区空间紧张

df -h

df -h 会以易读的单位显示各个文件系统的总容量、已用空间、可用空间和使用率。重点观察“挂载点”和“使用率”两列:如果某个分区的使用率明显偏高,就以它对应的路径作为后续排查起点。

例如,根目录分区显示空间紧张,就从 / 开始检查;如果某个用户目录所在分区异常,则可以直接检查对应的用户目录。不要只看“可用空间”这一列,因为不同文件系统的显示方式可能不同,使用率更适合快速判断问题范围。

用 du 查看根目录下的占用分布

确认从根目录排查后,可以先查看第一层目录:

sudo du -xhd1 / 2>/dev/null | sort -h

这条命令可以拆开理解:

  • du 用于统计目录和文件占用的磁盘空间;
  • -h 使用易读的单位显示大小;
  • -d1 只查看当前路径下一层目录;
  • -x 限制在当前文件系统内统计;
  • 2>/dev/null 隐藏因权限不足产生的错误信息;
  • sort -h 按易读的容量数值排序。

排序结果通常会把占用较小的目录放在前面,占用较大的目录放在后面。这样可以迅速判断问题集中在系统目录、用户目录,还是某个应用数据目录中。

如果不使用 sudo,部分目录可能因为权限不足无法读取,结果会不完整。使用管理员权限前,应确认当前账号具备相应权限,并避免在不清楚用途的情况下修改或删除系统文件。

继续进入占用较大的目录

假设上一步发现 /var 占用较大,就继续查看它下面的目录:

sudo du -xhd1 /var 2>/dev/null | sort -h

如果 /var/log 或其他子目录明显偏大,再继续向下缩小范围:

sudo du -xhd1 /var/log 2>/dev/null | sort -h

排查时不必一次把所有层级都列出来。每执行一次命令,就根据结果选择一个占用较大的目录继续检查。这样更容易判断问题究竟集中在哪一层,也能避免终端输出过长而难以阅读。

如果只想快速查看当前目录下的项目,可以使用:

du -sh ./* 2>/dev/null | sort -h

这里的 * 会匹配当前目录中的普通项目,但不会匹配以点号开头的隐藏项目。因此,当结果与实际占用明显不一致时,要记得隐藏目录可能没有被这条命令统计到。对于用户目录或应用目录,隐藏目录有时也可能占用较多空间,应单独核对。

筛选占用较大的文件和目录

确定重点目录后,可以用 du -ah 展开其中的文件和子目录,再按容量从大到小排序:

sudo du -ah /var/log 2>/dev/null | sort -hr | head -n 30

这条命令的作用是:

  • -a 同时显示文件和目录;
  • sort -hr 按易读的容量值倒序排列;
  • head -n 30 只保留前 30 项,便于快速查看。

输出中可能同时出现一个大目录和它里面的大文件。例如,某个目录显示占用较大,目录内部又列出一个同样很大的文件,这是正常现象,因为目录的统计值包含其下级内容。分析时要继续进入该目录,确认真正占用空间的文件,而不是把目录和文件的数值重复相加。

如果只想先看某个路径中最占空间的项目,可以减少显示数量:

sudo du -ah /path/to/check 2>/dev/null | sort -hr | head -n 20

/path/to/check 替换为实际排查路径,例如前面发现占用较大的目录。命令中的路径必须准确,尤其是包含空格或特殊字符时,不要凭感觉直接拼写。

如何判断问题范围

如果 df -h 显示某个分区接近用满,而 du 在对应路径下也能找到一个或多个大目录,通常说明问题就在这些目录的可见内容中。接下来应继续按目录层级检查,直到找到具体文件或明确的数据目录。

如果 df 显示的已用空间明显高于 du 统计出的目录总量,不要立即认定命令出错。两者统计角度不同:df 关注文件系统已经分配的空间,du 主要统计目录树中仍然可见的文件。此时应先重新确认排查路径、权限和统计范围,尤其注意是否遗漏了隐藏目录,或是否因为权限问题导致部分目录没有被读取。

命令输出中的单位也要保持一致理解。du -hdf -h 会使用易读单位显示结果,但它们的舍入方式和统计对象不同,因此不必要求两个命令的数字完全相等。排查的重点是找出占用最大的路径,以及它是否与空间紧张的分区相对应。

删除前先核对路径和用途

找到大文件后,先查看它的完整路径、文件名和所在目录,不要直接根据排序结果执行删除命令。尤其要注意以下几类情况:

  • 路径是否确实位于刚才发现空间紧张的分区;
  • 文件名是否包含空格、特殊字符或容易混淆的字符;
  • 文件是临时数据、日志、缓存,还是正在使用的业务数据;
  • 当前账号是否拥有修改或删除它的权限;
  • 删除后是否会影响正在运行的程序或后续排查。

可以先用普通目录查看命令确认目标:

ls -lh /path/to/check

如果目标是一个目录,应再次查看目录内部的占用情况,而不是直接删除整个目录。对于日志、缓存或临时文件,也应先确认其用途和是否可以重新生成。仅凭文件大小无法判断文件是否能够安全删除。

确认无误后,再选择符合实际情况的清理方式。清理操作应尽量针对明确的文件或经过核对的目录,避免使用范围过大的通配符。执行删除前,可以先把准备操作的路径打印出来或复制保存,减少路径写错造成误删的风险。

一套稳妥的排查顺序是:先用 df -h 确认空间紧张的分区,再用 du -xhd1 判断大目录,进入重点目录后继续使用 du 缩小范围,最后用 du -ah ... | sort -hr | head 找出具体的大文件和大目录。每一步都应根据输出决定下一步,而不是直接在根目录下进行大范围删除。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享