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/*
如此一层层地找下去,直到定位到具体的目录或文件。
sort
和 head
快速定位Top 10
3. 结合 如果你想一步到位,直接找到整个系统中最占空间的目录,可以用管道组合命令:
# 查找根目录下第一级目录的大小,并按从大到小排序,显示前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
是一个交互式的磁盘使用分析工具,它会扫描整个目录,然后提供一个可以上下导航的界面,非常直观。
ncdu
1. 安装 - 在 Debian/Ubuntu 上:
sudo apt update sudo apt install ncdu
- 在 CentOS/RHEL 上:
sudo yum install ncdu
ncdu
2. 使用 直接在根目录运行它:
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
命令来显示其详细信息。
总结与排查步骤建议
全局概览:先用
sudo ncdu /
或sudo du -h --max-depth=1 / | sort -rh | head -n 10
快速定位是哪个顶级目录(如/var
,/usr
,/home
)最占用空间。常见“元凶”检查:根据第一步的结果,重点检查以下常见目录:
- /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
清理。
- Debian/Ubuntu:
- /home 或 /root: 用户的主目录,检查是否有用户下载的大文件或不再需要的数据。
- /tmp: 临时文件目录。
查找巨型文件:使用
find / -type f -size +1G
这样的命令,看看是否有被遗忘的单个大文件(如数据库备份、ISO镜像等)。谨慎删除:在删除任何文件之前,请务必确认该文件不是系统运行所必需的。如果不确定,最好先搜索一下文件名,了解它的作用。误删系统文件可能导致系统无法启动。