Linux查看文件大小,du和df命令区别

前言

排查磁盘满时最容易混淆 du 和 df:一个统计文件实际占用,一个统计分区已用空间,二者数字常常对不上。搞清楚各自口径、配合使用,才能准确找到占空间的目录和被已删除但仍被进程占用的空间。本篇讲清两者区别、常用参数和排查组合拳。

一、df:看分区(文件系统)整体用量

df 读取文件系统超级块,统计每个分区总容量、已用、可用、挂载点,回答的是"这块盘还剩多少"。

# 人类可读格式(K/M/G),显示文件系统类型
df -hT
# 只看某个挂载点
df -h /var
# 列出 inode 使用情况(空间没满但报 No space 时排查)
df -i

参数:-h 人类可读,-T 显示类型,-i 查看 inode,-x tmpfs 排除内存临时文件系统。

二、du:统计目录/文件实际占用

du 遍历目录树累加每个文件大小,回答的是"哪个目录最占地方"。

# 查看当前目录大小,人类可读
du -sh .
# 查看 /var 下一级子目录大小并排序(从大到小)
du -h --max-depth=1 /var | sort -rh | head -20
# 查看单个文件大小
du -h /var/log/messages
# 统计当前目录下各子目录,只显示总计
du -sh /var/*

参数:-s 只显示汇总,-h 人类可读,--max-depth=N 限定统计层级,-x 不统计其他挂载点。

三、两者核心区别

对比项 df du
统计对象 文件系统分区整体 目录/文件实际大小
数据来源 超级块分配/使用记录 遍历文件累加
回答问题 盘还剩多少 哪个目录占空间
典型用途 判断是否磁盘满、inode 耗尽 定位大目录、大文件

四、为什么 du 和 df 数字对不上

常见三种原因:

  1. 已删除文件仍被进程占用:文件删掉了但进程没释放句柄,du 不再统计,df 仍计入已用。用 lsof | grep deleted 找到占用进程,重启或截断对应文件即可释放。
  2. 硬链接重复统计口径:du 按目录累加,硬链接在不同目录可能被重复计数;df 看块设备分配更准。
  3. 隐藏在挂载点下的旧文件:目录里先写了数据,后在该路径挂载新盘,旧文件被遮盖,du 看不到,df 上一层分区仍占用。

五、磁盘满排查标准流程

# 1. 先用 df 确认哪个分区满了、inode 是否耗尽
df -h
df -i
# 2. 进入对应分区,逐层 du 找大目录
du -h --max-depth=1 /var | sort -rh | head
# 3. 找大于 500M 的文件
find /var -type f -size +500M -exec ls -lh {} \;
# 4. 检查被删除但仍占用空间的文件
lsof | grep deleted

定位到日志、缓存、旧备份等大文件后,优先归档或压缩,不要直接 rm 正在被写入的日志,应截断:

# 清空正在写入的日志而不释放句柄冲突
> /var/log/nginx/access.log

六、常见坑

  1. 只 du 不 df:看完目录不大,却忽略分区已 100%;
  2. du -sh / 统计到其他挂载点:加 -x 限定当前文件系统;
  3. 误删正在写入的大日志:空间不释放,应先重启对应服务或用 > 截断;
  4. 只看磁盘空间忽略 inode:小文件过多时空间有剩但创建文件失败,用 df -i 排查;
  5. 权限不足漏统计:普通用户 du 部分目录读不到,排查时用 root。

总结

df -h 看分区用量和剩余,du -sh --max-depth=1 目录 逐层定位大目录;两者数字不一致时优先怀疑"已删除但被进程占用"的文件,用 lsof | grep deleted 核对。排查顺序:先 df 定位分区,再 du 找目录,最后 find 找具体大文件。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-22 07:33 

Linux磁盘占用100%怎么排查,大文件查找清理方法

前言

服务器磁盘爆满到100%,会导致网站写不了日志、数据库报错、服务异常退出。很多人只看到根目录满,却找不到到底是谁占的。本篇按"先看分区→再找大目录→再找大文件→安全清理"的顺序给出可直接执行的命令。

一、先看哪个分区满了

df -h

看 Use% 列,找到达到100%的挂载点(常见是 / 根分区或 /data)。注意区分分区,别在没满的分区里瞎找。

二、逐级定位占用最大的目录

# 从根目录开始,显示一级目录大小,排序,排除挂载点干扰
du -h --max-depth=1 / 2>/dev/null | sort -rh | head

进入最大的那个目录重复执行,比如:

du -h --max-depth=1 /var 2>/dev/null | sort -rh | head

一层层往下钻,直到定位到具体目录。

三、查找超过指定大小的大文件

# 找出/var下大于500MB的文件
find /var -type f -size +500M -exec ls -lh {} \; 2>/dev/null | awk '{print $5, $9}'
# 全盘找大于1G的文件
find / -type f -size +1G 2>/dev/null | xargs ls -lh

常见大头:日志文件、MySQL binlog、Docker镜像/容器、上传目录、core dump、旧备份。

四、安全清理方式

  1. 日志文件:确认无用后清空(不要直接删正在写的文件,空间不释放):
    # 清空而不是删除,释放空间且进程句柄仍在
    > /var/log/nginx/access.log
  2. 已删除但仍被进程占用的文件(df满但du对不上):
    lsof | grep deleted
    # 找到对应PID后重启该服务释放句柄
  3. Docker清理:
    docker system df          # 先看占用
    docker system prune -a    # 清理无用镜像、停止容器、悬空卷
  4. 旧备份/binlog:确认可删后 rm -f,MySQL binlog 用 PURGE BINARY LOGS 正规清理。

五、常见坑

  1. 直接rm正在写入的大日志:空间不立刻释放,要 > 文件 清空或重启进程;
  2. df满du小:典型是已删除文件被进程占用,用 lsof | grep deleted 找;
  3. 只删根目录表面:--max-depth=1 逐级下钻才找得到真凶;
  4. 误删数据库文件/系统日志:清理前先 ls -lh 确认,重要数据先备份;
  5. Docker不清理:镜像层和停止容器很容易吃掉几十G,docker system prune 定期跑。

总结

df -h 找满的分区,du --max-depth=1 逐级定位,find -size 找大文件,日志用清空、Docker用prune、被占用文件重启释放。按这条链路,100%磁盘很快能查清楚。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-20 07:26 

Linux查看目录占用

Linux查看目录占用

引言

磁盘满了先定位是哪个目录吃掉空间,df看整体分区,du逐层下钻找大户。两个命令配合,从分区到目录到文件逐级缩小范围,是磁盘排查的标准路径。

看整体分区:df

df -h

人类可读格式显示各分区总量、已用、可用、使用率,先判断是哪个挂载点满了。

看单个目录总大小

du -sh /var/log

-s汇总,-h人类可读,直接给出这个目录总共占多大。

看一级子目录大小并排序

du -h --max-depth=1 /var | sort -rh | head

只算一层子目录,sort -rh按人类可读大小倒序,head取前几名,快速定位大户。

常用简写

du -sh /var/*

列出/var下每个一级目录大小,逐层进入继续排查。

排除文件系统统计

du -shx /home

-x不跨文件系统,避免把挂载的别的盘也算进来。

看目录下文件数量

ls /var/log | wc -l

有些目录不大但文件海量,inode耗尽也会写不进,配合df -i看inode。

注意事项

  • df看分区,du看目录,先df定位再du下钻;
  • 大目录du会遍历较慢,加--max-depth限制层数;
  • 删除大文件后空间没释放,可能是进程仍持有句柄,需重启进程;
  • sort -rh依赖du输出的G/M单位;
  • /proc、/sys是虚拟文件系统,du统计无意义;
  • 日志目录优先排查,常是增长最快的大户。

总结

df -h看分区整体,du -sh看单目录汇总,--max-depth=1配合sort -rh找一级大户,-x不跨文件系统,ls加wc -l看文件数,df -i查inode。排查路径是先df定位满的分区,再du逐层下钻,删文件后空间不释放要查持有句柄的进程,日志目录优先检查。


emer 发布于  2026-10-20 07:14 

Linux查找大文件

Linux查找大文件

引言

服务器磁盘爆满时,df先看哪个分区满,再用du一层层往下钻,找到吃掉空间的大目录和大文件。很多人只会df -h,却定位不到具体是哪个文件,这里讲完整排查链路。

第一步看分区占用

df -h

看Use%和挂载点,确认是/、/data还是/var满,别在没满的分区里瞎找。

第二步定位大目录

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

du -sh统计每个一级目录大小,sort -rh按大小倒序,head取前几名,快速锁定大头目录,再逐层深入:

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

第三步找超过100M的单文件

find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null

-size +100M表示大于100MB,2>/dev/null丢弃无权限报错,直接列出大文件路径和大小。

常见膨胀位置

  • /var/log:日志没轮转,单个日志几个G;
  • /tmp:临时文件没清理;
  • Docker:/var/lib/docker镜像和容器层堆积;
  • 网站上传目录、数据库binlog。

处理建议

  • 日志优先清空而不是删文件(> log.log),避免占用文件句柄不释放;
  • Docker用docker system prune清理悬空镜像;
  • 删之前确认文件没被进程占用,lsof | grep 文件名;
  • 不要直接rm正在写入的日志,用truncate -s 0截断。

注意事项

  • du统计含磁盘占用,find看文件真实大小,两者结合;
  • 根目录全盘find慢,先缩小到df定位的分区;
  • 系统目录(/usr、/lib)别乱删,只清理业务数据和日志。

总结

df -h定位满的分区,du -sh逐层排序找大目录,find -size找大文件,先看日志和Docker,清空用truncate别rm占用文件。按分区→目录→文件三层下钻,几分钟就能找到磁盘元凶。


emer 发布于  2026-10-19 07:18 

Linux 查看磁盘空间

Linux 查看磁盘空间

服务器磁盘满了怎么办?这些命令帮你快速排查。

1. df 查看整体磁盘

基本用法

# 查看磁盘使用情况
df

# 人性化显示(带M、G单位)
df -h

常用参数

  • -h: 人性化显示大小
  • -T: 显示文件系统类型
  • -i: 查看 inode 使用情况
# 常用组合
df -hT

输出说明:

  • Filesystem: 磁盘分区
  • Size: 总大小
  • Used: 已用
  • Avail: 可用
  • Use%: 使用率
  • Mounted on: 挂载点

2. du 查看目录大小

查看当前目录大小

# 当前目录总大小
du -sh

# 查看指定目录
du -sh /var/log

查看子目录大小

# 查看当前目录下每个子目录大小
du -sh *

# 按大小排序
du -sh * | sort -rh

常用参数

  • -s: 只显示总计
  • -h: 人性化显示
  • --max-depth=1: 只看一层
# 查看根目录下各目录大小
du -sh /* --max-depth=1

3. 查找大文件

查找大于100M的文件

find / -type f -size +100M -exec ls -lh {} \;

查找最近修改的大文件

find /var -type f -size +50M -mtime -7

4. 常见排查场景

1)磁盘满了

# 先看哪个分区满了
df -h

# 找到大目录
du -sh /* | sort -rh

2)日志占空间

# 查看日志目录大小
du -sh /var/log

# 清空大日志文件
> /var/log/large.log

3)inode满了

# 查看inode使用
df -i

5. 清理磁盘

清理日志文件

# 清空文件(不删除文件)
> /var/log/messages

# 删除旧日志
rm /var/log/*.old

清理缓存

# 清理包缓存
yum clean all

清理 Docker 没用的镜像

docker system prune -a

总结

Linux 查看磁盘空间要点:

  • df -h 查看整体磁盘使用
  • du -sh 查看目录大小
  • find 查找大文件
  • 磁盘满了先看分区,再找大目录
  • 日志文件要定期清理
  • 注意 inode 也可能满
  • 用 sort -rh 按大小排序

运维排查磁盘问题,这些命令天天用。


emer 发布于  2026-10-9 07:21 

Linux查看文件大小,du和df命令区别

前言

服务器磁盘满了,不知道哪个目录占的空间最大?du 和 df 是两个最常用的查看磁盘空间的命令,但很多人搞不清它们的区别。本文一次讲清楚。

du 和 df 的区别

du(Disk Usage)

看的是文件和目录占用的磁盘空间。

比如某个目录下有多少文件,总共占多少空间。

df(Disk Free)

看的是磁盘分区的整体使用情况。

比如整个硬盘总共有多大,用了多少,还剩多少。

一句话总结

  • du:看文件/目录占了多少
  • df:看磁盘分区总共多大、剩多少

df 命令

查看整体磁盘使用情况

df -h

-h 是 human-readable 的意思,输出成 K、M、G 的易读格式。

输出类似:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   30G   18G  63% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
/dev/sdb1       100G   50G   45G  53% /data

只看某个分区

df -h /

只看根分区的使用情况。

显示文件系统类型

df -Th

多了一列 Type,显示是 ext4、xfs 还是其他类型。

du 命令

查看某个目录占多大空间

du -sh 目录路径

比如看 /var 目录:

du -sh /var

-s 是 summary,只显示总计;-h 是易读格式。

输出类似:

5.2G    /var

查看当前目录下每个子目录的大小

du -sh *

输出当前目录下每个子目录占多大空间。

按大小排序

du -sh * | sort -hr

sort -hr 是按数字从大到小排,这样就能一眼看到哪个子目录最大。

找当前目录下最大的10个文件

du -ah . | sort -hr | head -10

-a 是包括文件,不只是目录。

只看一层深度

du -h --max-depth=1 /var

只看 /var 下第一层的子目录大小,不往下钻。

常见场景

场景1:磁盘满了,找大文件

# 先看哪个分区满了
df -h

# 然后去那个分区找大目录
cd /
du -sh * | sort -hr | head -10

# 找到大目录后继续往下钻
cd /var
du -sh * | sort -hr | head -10

一步步找到占空间最大的文件,然后删掉。

场景2:看日志占了多少

du -sh /var/log

场景3:看网站占了多少

du -sh /var/www/html

常见坑

坑1:du 和 df 显示的已用空间不一样

明明删了大文件,但 df 显示还是满的。

原因: 文件被进程占用着,删了之后空间没真正释放。

解决: 找到占用这个文件的进程,重启或者杀掉:

lsof | grep deleted

找到 PID 后重启对应的服务。

坑2:du 命令跑了半天还在跑

du 一个大目录,半天没反应。

原因: 目录太大,文件太多。

解决: 加 --max-depth=1 限制深度,或者先确认一下目录有多大再决定要不要跑。

坑3:df 显示已用空间和 du 对不上

df 显示用了 80G,但 du 加起来才 50G。

原因: 可能有隐藏文件、挂载点下面的文件,或者有进程占用着已删除的文件。

解决: 检查:

# 看有没有挂载点
mount

# 看有没有已删除但还被占用的文件
lsof | grep deleted

坑4:du 显示的大小和 ls 不一样

ls 显示文件是 10M,du 显示是 11M。

原因: du 看的是磁盘块占用,文件系统按块分配空间,实际占用会比文件大小略大一点。

解决: 正常现象,不用纠结。

总结

命令 作用
df -h 看磁盘分区整体使用情况
du -sh 目录 看某个目录占多大空间
du -sh * | sort -hr 看当前目录下每个子目录大小并排序
du -h --max-depth=1 目录 只看一层深度
lsof | grep deleted 看已删除但被进程占用的文件

日常运维记住:df 看分区,du 看目录。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 07:46 
'); })();