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

一、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
