1. 首页 > 技术教程 > 正文

磁盘看板:df、du 命令快速定位占用空间的“大胃王”

磁盘看板:df、du 命令快速定位占用空间的“大胃王”

服务器跑着跑着突然报“磁盘空间不足”,网站打不开,日志写不进去,连 SSH 都卡顿。别急着重启,用 df 和 du 两条命令,五分钟内揪出那个占满磁盘的“大胃王”。主机选这篇 Linux 教程直接上干货,适合服务器运维和 VPS 运维实战场景。

磁盘看板:df、du 命令快速定位占用空间的“大胃王”的图片

一、df 命令:看磁盘整体“账本”

df(disk free)用来查看文件系统整体使用情况,比如总容量、已用、可用、挂载点。老手排查磁盘空间的第一步就是跑这个。

df -h # -h 参数以人类可读格式显示(GB、MB)

输出示例:

Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 18G 1.5G 93% /
tmpfs 1.9G 8.0K 1.9G 1% /dev/shm

看到 `/` 根分区用了 93%,问题就在这。如果某个分区使用率超过 80%,就该往下查了。

1.1 只显示某个挂载点

df -h / # 只看根分区

1.2 排除 tmpfs 等虚拟文件系统

df -h –type=ext4 # 只显示 ext4 格式的磁盘

**常见报错**:执行 df 卡死,大概率是 NFS 挂载点无响应。可以加 `–direct` 或 `-l`(本地文件系统)来跳过网络挂载。

二、du 命令:找到“大胃王”的精确位置

df 告诉你磁盘满了,du(disk usage)告诉你哪些目录或文件在吃空间。配合 `sort` 排序,一秒定位元凶。

2.1 统计当前目录下各子目录的大小

du -sh * # -s 汇总,-h 可读格式,* 表示所有子目录和文件

输出示例:

1.2G logs
500M backup
4.0K tmp

`logs` 目录吃了 1.2G,八成是日志文件没清理。

2.2 统计当前目录下所有子目录的详细占用

du -h –max-depth=1 /var # 只看 /var 下一级目录

2.3 找出最大的 10 个文件或目录

du -h /var 2>/dev/null | sort -rh | head -10

• `2>/dev/null`:忽略权限报错。

• `sort -rh`:按大小倒序排列(r 反向,h 人类可读)。

• `head -10`:只取前 10 行。

**老鸟叮嘱**:du 扫描大目录(如 `/var/log`)可能耗时较长,建议先用 `cd` 进入怀疑有问题的目录再执行,别在根目录直接跑 `du -sh /`,那会卡半天。

三、实战排障:从 df 到 du 的完整流程

假设你通过 `df -h` 发现 `/` 分区使用率 95%。按下面步骤走:

3.1 进入根目录,看哪些一级目录占用大

cd /
du -sh * 2>/dev/null | sort -rh | head -5

输出:

3.2G var
2.1G home
1.5G usr

3.2 继续深入 `var` 目录

cd /var
du -sh * 2>/dev/null | sort -rh | head -5

输出:

2.8G log

3.3 进入 `log` 目录,定位大文件

cd /var/log
du -h * 2>/dev/null | sort -rh | head -10

输出:

1.2G syslog.1
800M messages

**常见报错**:`du: cannot read directory ‘xxx’: Permission denied`。加 `sudo` 提权即可。

3.4 清理大文件

sudo truncate -s 0 /var/log/syslog.1 # 清空文件内容,不删除文件
sudo rm -f /var/log/messages # 直接删除(谨慎操作)

**老鸟叮嘱**:清理日志前先确认服务是否在写那个文件。如果 `rm` 后服务还占用文件句柄,空间不会立即释放。建议用 `truncate` 或重启对应服务。

四、老鸟叮嘱:一个高风险操作

千万不要在生产环境直接 `rm -rf /var/log/*`。这会删掉所有日志目录,包括可能正在被服务占用的文件,而且某些日志目录(如 `/var/log/nginx`)被删后,Nginx 会报错无法写入日志。正确做法是:

1. 先 `cd /var/log`。
2. 用 `du -sh *` 找出大文件。
3. 针对单个文件用 `truncate -s 0` 清空。

FAQ

Q1:Linux SSH 连不上怎么办?

先检查服务器是否还活着(ping 一下)。如果 SSH 卡在连接阶段,可能是磁盘写满了导致 SSH 服务无法创建 session 文件。用 VPS 控制面板的 VNC 或救援模式登录,执行 `df -h` 看磁盘使用率,清理 `/tmp` 或 `/var/log` 里的垃圾文件。

Q2:VPS 防火墙端口放行后还是访问不了是什么原因?

防火墙规则正确但访问不了,先 `df -h` 确认磁盘是否爆满。磁盘满时,服务可能无法写入日志或创建临时文件,导致进程假死。另外检查服务是否在监听对应端口:`ss -tlnp | grep 端口号`。

Q3:Linux 小白可以直接用 root 账号操作吗?

可以,但风险极高。建议日常用普通用户加 `sudo`。尤其在执行 `rm`、`truncate`、`chmod` 等命令前,多确认路径。主机选建议所有服务器运维操作都先在测试环境验证。

Q4:BBR 开启后为什么速度没有明显提升?

BBR 对高延迟、丢包场景效果明显,但如果本地网络本身带宽不足,或者服务器磁盘 I/O 瓶颈(比如磁盘满),BBR 也救不了。先 `df -h` 确认磁盘健康,再用 `iperf3` 测速。

Q5:du 命令扫描很慢怎么办?

用 `du –exclude=/proc –exclude=/sys` 排除虚拟文件系统。或者指定具体目录,比如 `du -sh /var/log`,别扫全盘。

Q6:df 显示空间已满,但 du 统计的总和却对不上?

常见原因是某个大文件被删除但进程还在占用。用 `lsof +L1` 查看被删除但未释放的文件,找到 PID 后重启对应进程即可释放空间。

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9404.html 商家投稿邮箱:zhujixuanblog@qq.com