Linux服务器磁盘满了,如何判断大文件在哪里?哪些文件可以删除?
今天用df -h 命令发现服务器磁盘空间快满了。

当服务器磁盘空间不足时,可通过以下步骤定位占用空间较大的目录和文件,以下操作基于Linux系统(以你提供的df -h输出为例,磁盘 /dev/vda1 挂载在 / 根目录,已使用81%):
一、快速定位大文件/目录的常用工具
1. du 命令(磁盘使用情况统计)
功能:递归扫描指定目录,统计各子目录/文件的磁盘占用大小。
常用参数:
-h:以人类可读的格式显示(如GB、MB)。-s:仅显示目录/文件的总大小(不显示子项)。-d N:指定扫描深度(N为数字,如-d 1表示仅扫描当前目录的一级子目录)。
操作示例:
# 扫描根目录(/)下的一级子目录,按大小排序(从大到小)
du -h --max-depth=1 / | sort -rh
# 查看当前用户家目录(~)的总大小
du -sh ~
输出解读:
执行后会列出各目录的大小,如:
40G /var
30G /usr
5G /home
数值最大的目录即为占用空间最多的位置。
2. ncdu 命令(可视化磁盘分析工具,需安装)
功能:交互式图形界面,更直观地展示目录结构和文件大小,支持键盘操作(如方向键、删除文件等)。
安装方法(以CentOS为例):
yum install ncdu -y
使用方法:
ncdu / # 扫描根目录
- 按
方向键移动光标,Enter键进入子目录,d键标记文件/目录删除(需谨慎!)。
3. find 命令(查找大文件)
功能:按文件大小过滤,快速定位单个大文件(如超过1GB的文件)。
常用参数:
-size +Nc:查找大于N字节的文件(c为字节,M为MB,G为GB)。
操作示例:
# 查找根目录下大于1GB的文件
find / -type f -size +1G -exec du -h {} \;
# 查找当前目录下最大的10个文件
find . -type f -exec du -h {} \; | sort -rh | head -n 10
二、常见大文件目录分析
根据Linux系统结构,以下目录常出现大文件,可优先检查:
| 目录路径 | 常见大文件类型 | 清理建议 |
|---|---|---|
/var/log |
系统日志(.log、.log.gz) | 删除过期日志,或配置日志轮转(logrotate)自动清理。 |
/var/lib |
应用数据(如Docker镜像、数据库文件) | 清理无用的Docker镜像/容器、数据库备份或临时文件。 |
/usr/local |
自定义安装的软件或库 | 删除不再使用的软件安装包或编译缓存。 |
/home |
用户文件(如上传文件、备份数据) | 清理用户无用文件或迁移数据至外部存储。 |
/tmp |
临时文件 | 直接清空(需确保无正在使用的进程):rm -rf /tmp/*。 |
/root |
管理员文件(如脚本、下载文件) | 清理备份文件或临时脚本。 |
三、清理文件的注意事项
-
谨慎操作:
- 避免删除系统关键文件(如
/etc、/bin目录下的文件)。 - 使用
rm命令前务必确认文件用途,建议先备份重要数据。
- 避免删除系统关键文件(如
-
日志清理:
- 系统日志通常位于
/var/log,可通过logrotate服务自动管理,避免手动删除导致服务异常。
- 系统日志通常位于
-
应用数据清理:
- 若使用Docker、MySQL等服务,需通过对应工具清理(如
docker system prune、数据库备份删除)。
- 若使用Docker、MySQL等服务,需通过对应工具清理(如
-
保留可用空间:
- 建议至少保留10%的磁盘空间,避免因空间不足导致系统故障。
四、示例操作流程
假设通过du -h --max-depth=1 /发现/var目录占用40GB:
# 进入/var目录,继续扫描二级子目录
du -h --max-depth=1 /var | sort -rh
# 发现/var/lib/docker占用30GB(Docker镜像/容器数据)
docker system prune -a # 清理所有无用镜像和容器(谨慎操作!)
通过以上工具和方法,可逐步定位并清理大文件,释放磁盘空间。操作前建议先备份重要数据,并确认文件用途,避免误删导致服务异常。
浙公网安备 33010602011771号