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占用文件。按分区→目录→文件三层下钻,几分钟就能找到磁盘元凶。
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 按大小排序
运维排查磁盘问题,这些命令天天用。