查看Linux服务器剩余磁盘空间,最直接的命令是df -h,它会以人类可读的格式显示每个分区的容量、已用、可用和挂载点。 但“怎么看”只是第一步,真正棘手的是磁盘满了之后怎么定位大文件、怎么安全清理,下面按排查顺序拆开讲。
linux服务器查看磁盘空间用什么命令最快
df -h 与 df -i 各司其职
df -h 是绝大多数场景下的首选。-h 参数自动把字节数换成 GB、MB 这种易读单位,执行后第一眼看到的是文件系统名字,然后是总容量、已用、可用、使用率百分比,最后是挂载点。
如果要看 inode 使用情况,用 df -i,很多时候磁盘空间还有,但 inode 耗尽,照样报“空间不足”,常见于小文件特别多的目录,比如邮件队列或缓存目录。
读懂一行输出
以 /dev/sda1 50G 30G 20G 60% / 为例,50G 是总容量,30G 已用,20G 可用,60% 是使用率,注意“可用”这一列有时会被保留块影响,所以不用纠结为什么总容量减已用不等于可用,保留块是文件系统为 root 用户预留的空间,默认占 5%,作用是防止日志或关键进程写满后连登录都做不到。
df 常用参数对比
| 参数 | 作用 | 使用场景 |
|---|---|---|
| -h | 人类可读单位 | 日常查看 |
| -i | 查看 inode | 磁盘没满但报错时 |
| -T | 显示文件系统类型 | 排查分区格式 |
| -x | 排除指定类型 | 跳过 tmpfs 等虚拟文件 |
| -P | 输出格式不换行 | 脚本解析结果时 |
只看某个挂载点的剩余空间
用 df -h / 或者 df -h /var,如果服务器上挂载了数据盘,/data,那就用 df -h /data,这样输出只有一行,不会把 proc、sys 这些虚拟文件系统混进来,虚拟文件系统的数据在内存里,不算真正的磁盘占用,看了反而干扰判断。
为什么不用 fdisk 或 lsblk
fdisk -l 查看的是磁盘分区的物理大小,不代表分区已经使用的空间。lsblk 只能看到设备树和容量,看不到“剩余多少”,它们适合看磁盘有没有被正确识别,不适合回答“还剩多少空间”。
磁盘满了但不知道怎么排查?用 du 命令定位大文件
当你执行 df -h 发现某个分区 100% 了,下一步就是找具体是哪个文件占的空间。du 命令是核心工具。
du -sh 和 du -sh 的区别
du -sh 目录显示这个目录的总大小。du -sh显示当前目录下每个子项的大小,方便逐级比较。
在 /home 下执行 du -sh | sort -hr,如果看到某个用户目录异常大,就进去继续筛,用 du -ah 可以同时显示文件和目录,但输出太多,建议用顶层目录筛选。
一个常见的误区是用 ls -lh 查看文件大小,它只能看单层目录,不能递归统计,所以不适合定位占满磁盘的罪魁祸首。
查找单个大文件
find / -type f -size +500M -exec ls -lh {} ; 这条命令会搜索整个根目录下大于 500MB 的文件,注意开头限制范围,/var、/home,否则会扫很久,如果想扫得干净又不跨文件系统,加 -xdev 参数,只搜索当前挂载点内的文件。
高效排序法
把 du 和 sort 组合起来:
du -ah . 2>/dev/null | sort -rh | head -30
这条在几十 GB 的数据目录下也能快速列出最大的前 30 个文件,多数情况下,最大的那一个就可以解释磁盘为什么会满。
检查被删除但未释放空间的文件
有个经典情况:文件被 rm 了,但空间没释放,因为某个进程仍然持有它的文件描述符。lsof +L1 可以列出所有被删除但仍然打开的文件,看到后,重启对应进程即可,排查流程:df -h 发现满 –> lsof +L1 找到进程 –> 重启进程或服务,如果你发现 du -sh / 统计出来的总量比 df -h 显示的小,多半就是这个问题。
用 ncdu 做交互式分析
如果你不想一条条敲命令,可以安装 ncdu,它把目录大小做成可视化的界面,方向键进入目录,回车筛选,删除文件也方便,Debian/Ubuntu 用 apt install ncdu,CentOS 用 yum install ncdu,注意需要 root 权限才能读其他用户的目录。
linux服务器磁盘空间不足怎么清理最安全
磁盘使用率超过 80% 就该检查了,行业共识认为,长期高使用率会显著增加日志写满、临时文件爆掉的风险,清哪些,取决于你的业务形态。
先定位占用空间的大头
不要凭感觉删文件,用 du -sh / 2>/dev/null 查看根目录下每个一级子目录的大小,注意这里用了 2>/dev/null 把权限不足的报错丢掉了,如果某个目录特别大,再进去逐层排查。
快速找出占用磁盘最多的目录
命令套路是:
du -sh /var/log /var /tmp /home 2>/dev/null
或者配合 sort -h 按大小排序:
du -sh /var/ 2>/dev/null | sort -hr | head -20
这样能一眼看到哪几个目录吃掉了大部分空间,常见元凶是日志、数据库备份、临时文件、容器镜像。
清理日志文件,别急着删
系统日志和 Nginx、Tomcat 这类应用日志增长很快,先看有没有自动轮转。rsyslog 配置在 /etc/logrotate.d/ 下,如果日志已经很大,可以手动清理,但别直接 rm 正在被进程打开的日志文件,否则空间不会真正释放。
正确做法是 truncate -s 0 /var/log/syslog,把文件清空而不是删除,这样进程依然持有文件描述符,空间立刻释放。
清理 journald 日志
journalctl --disk-usage 查看 systemd 日志占用,保留最近 7 天:
journalctl --vacuum-time=7d
这条命令不会影响正在运行的服务,如果系统日志量大,也可以直接限制 journal 文件总大小,改 /etc/systemd/journald.conf 里的 SystemMaxUse=100M,改完重启 systemd-journald。
包管理器缓存和临时文件
Debian/Ubuntu 系统用 apt-get clean 清理下载的 deb 包,CentOS/RHEL 用 yum clean all。/tmp 目录在重启后一般会被清,但长期跑着的服务器不会主动清,需要手动删除长时间没更新的临时文件,可以用 find /tmp -type f -atime +7 -delete,谨慎起见先看看有哪些文件。
删除无用的旧内核
内核升级后,旧内核包一直占着 /boot 空间,用 uname -r 查看当前内核版本,然后用 dpkg --list | grep linux-image(Debian 系)确认哪些旧内核可以卸载,CentOS 下用 package-cleanup --oldkernels --count=2,建议保留当前版本及上一个版本,防止新内核出问题无法回退。
Docker 相关的额外占用
如果你在服务器上跑容器,Docker 的镜像、容器层和日志随时会填满磁盘,先执行 docker system df 查看各类资源占用。
- 删除悬空镜像:
docker image prune - 清理无用的构建缓存:
docker builder prune - 限制容器日志大小,在
/etc/docker/daemon.json里加"log-opts": {"max-size": "10m"},然后重启 Docker
数据库和备份文件单独处理
如果是 MySQL 或 PostgreSQL 的服务器,二进制日志和备份文件往往占空间大头,数据库二进制日志用 PURGE BINARY LOGS BEFORE NOW() 清理,具体方式取决于配置,备份文件建议压缩后按周期删除,不要全部堆在磁盘上,建议给备份单独挂一个大容量分区,避免和系统分区挤在一起。
监控磁盘空间,防止下次爆满
不用等到满了才查,在服务器上放一个简单的脚本,用 cron 定时跑。
写一个磁盘告警脚本
思路是:检查每个分区的使用率,超过阈值(80%)就发送邮件或输出到日志,脚本内容大致如下:
#!/bin/bash
threshold=80
df -h | awk '{print $5, $6}' | grep -v 使用率 | while read usage partition; do
percent=${usage%%}
if [ "$percent" -gt "$threshold" ]; then
echo "$partition 使用率 $percent%" >> /var/log/disk_warning.log
fi
done
然后用 crontab 每小时执行一次:crontab -e 添加 0 /usr/local/bin/disk_check.sh,注意脚本加上执行权限,也可以把告警消息通过 mailx 发送,或者写入到监控平台。
定期对比,发现异常增长
除了按固定周期清理日志,还可以用 du 生成历史大小记录,对比两天的差值,找出异常增长的目录,如果你手头有监控工具如 Zabbix、Prometheus,直接在图上看到趋势,比手动跑命令更省心,对云服务器,多数厂商也会自带磁盘监控,但自建脚本对任何机器都通用。
linux服务器磁盘空间相关常见问题解答
问题 1:df 显示的磁盘空间和 du 统计的不一致怎么回事?
df 查看的是文件系统层面的块使用情况,du 统计的是文件内容占用的空间,被删除但未释放的文件、文件系统元数据、保留块等都会造成差异,先执行 lsof +L1 排查被删文件,如果没有结果,一般是保留块或预分配空间的原因,多数情况下不需要处理。
问题 2:查看 linux 服务器磁盘空间时,inode 满了是什么意思?
inode 是文件系统存储文件元信息的位置,每个文件或目录都需要一个 inode,当磁盘还剩余空间但 inode 用完时,新文件无法创建,用 df -i 查看使用率,常见于消息队列、临时文件、缓存目录,解决办法是清理超量的小文件,find /目录 -type f -size 0 -delete 删除空文件,再检查是否有程序频繁创建小文件。
问题 3:/dev/sda1 100% 满了,怎么找到具体是哪个文件?
先用 df -h 确认挂载点,再进入该目录使用 du -sh | sort -hr 逐层排查,如果嫌麻烦,直接用 find / -xdev -type f -size +1G -exec ls -lh {} ;,-xdev 限制只搜索当前文件系统,速度更快,找到文件后根据文件类型决定是否删除或归档。
记住核心并非查看命令,而是建立一套从发现、定位到清理的流程。df -h 是入口,du 是放大镜,定期监控才是避免磁盘写满的安心方案。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/735473.html





