Linux 磁盘空间检查与清理技巧

方法一:使用 du 命令(最常用、最基础)

du (disk usage) 是分析目录大小的标准工具。

1. 逐层分析(推荐入门)

这是一种安全、逐步深入的方法。我们从根目录 / 开始,查找第一级目录下的大文件/目录。

# -h: human-readable,以K/M/G为单位显示
# -s: summarize,只显示总计大小
# /*: 根目录下的所有文件和目录
# --exclude: 排除某些虚拟文件系统,它们不占用实际磁盘空间,不排除会报错且数据不准
sudo du -sh --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run /*

命令解释:

  • sudo: 因为有些系统目录需要 root 权限才能读取。
  • du -sh: 计算每个参数指定目录的总大小,并以易读格式显示。
  • --exclude=...: 排除 /proc, /sys, /dev, /run 这些虚拟或临时文件系统,它们的大小不反映真实硬盘占用。
  • /*: 代表根目录下的所有子目录和文件,如 /home, /var, /usr 等。

执行后你可能会看到类似这样的输出:

1.2G    /boot
15G     /var
8.0K    /media
...
9.5G    /usr
1.5G    /home
...

从这个输出中,你可以清楚地看到 /var 目录最大(15G),其次是 /usr(9.5G)。

2. 深入挖掘

现在你知道 /var 是占用大头,可以继续对 /var 目录进行分析:

sudo du -sh /var/*

这会列出 /var 目录下一级的所有子目录大小。你可能会发现 /var/log 或者 /var/lib 特别大。然后继续深入,比如:

sudo du -sh /var/lib/*

如此一层层地找下去,直到定位到具体的目录或文件。

3. 结合 sorthead 快速定位Top 10

如果你想一步到位,直接找到整个系统中最占空间的目录,可以用管道组合命令:

# 查找根目录下第一级目录的大小,并按从大到小排序,显示前10个
sudo du -h --max-depth=1 / | sort -rh | head -n 10

命令解释:

  • --max-depth=1: 只显示当前目录下一层深度的目录大小。
  • sort -rh: -r 表示反向(从大到小),-h 表示按人类可读的数字(比如1G > 100M)排序。
  • head -n 10: 只显示排序后的前10行。

方法二:使用 ncdu (强烈推荐,更直观)

ncdu 是一个交互式的磁盘使用分析工具,它会扫描整个目录,然后提供一个可以上下导航的界面,非常直观。

1. 安装 ncdu

  • 在 Debian/Ubuntu 上:
    sudo apt update
    sudo apt install ncdu
    
  • 在 CentOS/RHEL 上:
    sudo yum install ncdu
    

2. 使用 ncdu

直接在根目录运行它:

sudo ncdu /

它会开始扫描磁盘。扫描完成后,你会看到一个交互式列表,按大小排序。

  • 你可以用 方向键 上下移动。
  • Enter 进入选中的目录。
  • d 可以删除选中的文件或目录(请极其小心!)。
  • ? 查看帮助。

ncdu 是排查磁盘空间问题的神器,因为它让你能快速地“钻取”到最深层的大文件。

方法三:使用 find 命令查找大文件

有时候,占用空间的是几个非常巨大的单个文件,而不是目录。find 命令可以帮你找到它们。

# 查找在根目录下(/)所有大于1GB的普通文件(-type f)
sudo find / -type f -size +1G -exec ls -lh {} \;

命令解释:

  • find /: 从根目录开始查找。
  • -type f: 只查找文件类型为普通文件(file)。
  • -size +1G: 文件大小超过 1 Gigabyte。你也可以用 +500M (500 Megabytes) 或 +100k (100 Kilobytes)。
  • -exec ls -lh {} \;: 对找到的每一个文件({}代表找到的文件名),执行 ls -lh 命令来显示其详细信息。

总结与排查步骤建议

  1. 全局概览:先用 sudo ncdu /sudo du -h --max-depth=1 / | sort -rh | head -n 10 快速定位是哪个顶级目录(如 /var, /usr, /home)最占用空间。

  2. 常见“元凶”检查:根据第一步的结果,重点检查以下常见目录:

    • /var/log: 日志文件。有些日志可能因为没有正确轮替(logrotate)而变得巨大。可以清理旧的日志文件。
    • /var/lib/docker: 如果你使用 Docker,这里会存放镜像、容器、卷,非常容易占用大量空间。可以使用 docker system prune -a 来清理。
    • /var/cache: 系统的包缓存。
      • Debian/Ubuntu: /var/cache/apt/archives/,可以用 sudo apt-get clean 清理。
      • CentOS/RHEL: /var/cache/yum/, 可以用 sudo yum clean all 清理。
    • /home/root: 用户的主目录,检查是否有用户下载的大文件或不再需要的数据。
    • /tmp: 临时文件目录。
  3. 查找巨型文件:使用 find / -type f -size +1G 这样的命令,看看是否有被遗忘的单个大文件(如数据库备份、ISO镜像等)。

  4. 谨慎删除:在删除任何文件之前,请务必确认该文件不是系统运行所必需的。如果不确定,最好先搜索一下文件名,了解它的作用。误删系统文件可能导致系统无法启动。

Last Updated:
Contributors: gclhaha