如何精确查询Linux服务器特定文件夹的详细空间占用情况?
- 内容介绍
- 文章标签
- 相关推荐
再看痛点直击。为什么硬盘空间总是“莫名其妙”满?
在运维日常中。最常遇到的尴尬场景往往是:
- 监控告警显示磁盘使用率已达 90%+,却找不到“罪魁祸首”。
-
程序提示 “No space left on device”,但
ls -l看不出哪个目录异常。 - 清理日志、删除旧文件后空间仍未回升,怀疑有隐藏的临时文件或误删的挂载点。
这些问题的根源几乎都是对文件夹占用情况缺乏精准、分层的视图。下面的章节将一步步教你用 Linux 原生命令和实用工具,快速定位并量化每个目录、子目录乃至单个大文件的磁盘占用。
一、先从全局视角审视文件程序——df
目标:了解哪块磁盘分区最紧张,确认要检查的挂载点。
# 人类可读输出
df -h
# 查看特定挂载点
df -h /var
-h 将字节数转换为易读单位;如果只想看某个文件程序的使用情况,只需在命令后加上方法即可。
二、细化到目录层级——du 系列实战
1. 最常用的一键概览
# 显示当前目录下每个子目录的总占用
du -sh ./*
# 按大小排序,找出“大块头”
du -sh ./* | sort -hr
2. 限制深度。仅看一级子目录
# --max-depth=1 等价于上面的 * 通配符,但更灵活
du -h --max-depth=1 /path/to/target
3. 查看单个目录的总大小
# 只输出总计,不列出每个子目录
du -sh /path/to/folder
4. 想要完整树形展示?加入 -a
# 列出所有文件和子目录的大小
du -ah --max-depth=2 /path/to/folder | sort -hr
5. 合并多个选项,实现“一键全能”
# 人类可读 + 总计 + 限制深度 + 排序
du -h --max-depth=2 /path/to/folder | sort -hr
三、交互式工具——ncdu
适用场景:当你希望在终端里直接“点开”目录查看占用时ncdu 是首选。
# 安装
sudo apt-get install ncdu
# 启动并扫描根分区
sudo ncdu /
# 扫描特定方法。例如 /var/log
sudo ncdu /var/log
ncdu 会以树形结构展示每层大小,你可以使用方向键快速展开/收起,按 d 删除不需要的文件或目录。按理说,这一步骤往往能在几秒钟内定位到占比最大的几个目录。
四、结合 find 挖掘“大块头”文件
If you suspect a handful of huge files are eating space,use:
# 查找大于 500M 的文件并按大小倒序排列
find /path/to/search -type f -size +500M -exec ls -lh {} + | sort -k5 -hr
# 只列出前 10 条最大文件
find / -xdev -type f -printf '%s %p
' | sort -nr | head -n 10 | awk '{printf "%.2f MB\t%s
"。$1/1024/1024,$2}'
五、脚本化批量检查:每日自动报告
If you need a recurring snapshot of folder usage for audit or alerting,wrap commands into a tiny Bash script:
#!其实,/usr/bin/env bash TARGETS= REPORT="/tmp/disk_usage_$.txt" { echo "=== Disk Usage Report: $ ===" df -hT | grep "^/dev" echo "" for DIR in "${TARGETS}";do echo "> $DIR" du -sh "$DIR" 2>/dev/null du -sh "$DIR"/* 2>/dev/null | sort -hr | head -n 5 echo "" done }> "$REPORT" # 可选:发送邮件或 Slack 通知 # mail -s "Disk Usage Report" <"$REPORT" # curl -X POST ... # Slack webhook echo "Report saved to $REPORT"
六、常见误区与排查技巧
-
NFS 或挂载点失效:A directory may appear empty but actually resides on a failed mount;check with
alert df –T. -
.git、Docker 镜像层:Docker 容器镜像默认保存在
/var/lib/docker;使用docksystem prune –a 清理未使用镜像。 -
.tmp/.cache 文件:Cron jobs often leave temporary files under
/tmp ;periodic clean‑up via/etc/tmpfiles.d . -
LVM 快照:LVM snapshots can silently consume dozens of GB;list m with
.
七、快速定位实战案例
从案例一来看,根分区已满,却找不到大文件所在位置
-
a. 先确认是哪个挂载点紧张:
$ df -hT | grep '^/dev' -
b. 使用 ncdu 快速浏览:
$ sudo ncdu / # 在交互界面里直接看到前十名占比目录 -
c. 若想进一步细化到单个大文件:
$ find / -xdev‑type f ‑size +1G ‑exec ls ‑lh {} + | sort ‑k5 ‑hr
\end{ol}
说到案例二。/home 下某使用者家目录爆炸式增长
-
执行单使用者专属查询:
$ du –sh /home/alice/* $ du –sh /home/alice/.cache # 常见缓存堆积点 $ du –sh /home/alice/.local/share/Trash/* # 垃圾箱 -
再看针对性清理,
- 再看删除旧日志,rm ‑rf /home/alice/*.log.*
- 再看清空回收站,rm ‑rf /home/alice/.local/share/Trash/*
- 压缩或迁移大媒体文件。
- ← → 展开/折叠;
- d 删除选中文件或目录;老实说,
- q 退出。
-
官方手册这方面,
man duman dfman ncdu; -
在线监控网站可将
df指标持久化; - “Linux 硬盘空间管理”系列视频教程。
⚠️ 小心误删!执行任何删除命令前请务必确认方法和备份策略。.常用快捷键
推荐阅读 & 工具链接
©2026 运维技术分享 • 如有版权争议,请联系作者撤稿。
再看痛点直击。为什么硬盘空间总是“莫名其妙”满?
在运维日常中。最常遇到的尴尬场景往往是:
- 监控告警显示磁盘使用率已达 90%+,却找不到“罪魁祸首”。
-
程序提示 “No space left on device”,但
ls -l看不出哪个目录异常。 - 清理日志、删除旧文件后空间仍未回升,怀疑有隐藏的临时文件或误删的挂载点。
这些问题的根源几乎都是对文件夹占用情况缺乏精准、分层的视图。下面的章节将一步步教你用 Linux 原生命令和实用工具,快速定位并量化每个目录、子目录乃至单个大文件的磁盘占用。
一、先从全局视角审视文件程序——df
目标:了解哪块磁盘分区最紧张,确认要检查的挂载点。
# 人类可读输出
df -h
# 查看特定挂载点
df -h /var
-h 将字节数转换为易读单位;如果只想看某个文件程序的使用情况,只需在命令后加上方法即可。
二、细化到目录层级——du 系列实战
1. 最常用的一键概览
# 显示当前目录下每个子目录的总占用
du -sh ./*
# 按大小排序,找出“大块头”
du -sh ./* | sort -hr
2. 限制深度。仅看一级子目录
# --max-depth=1 等价于上面的 * 通配符,但更灵活
du -h --max-depth=1 /path/to/target
3. 查看单个目录的总大小
# 只输出总计,不列出每个子目录
du -sh /path/to/folder
4. 想要完整树形展示?加入 -a
# 列出所有文件和子目录的大小
du -ah --max-depth=2 /path/to/folder | sort -hr
5. 合并多个选项,实现“一键全能”
# 人类可读 + 总计 + 限制深度 + 排序
du -h --max-depth=2 /path/to/folder | sort -hr
三、交互式工具——ncdu
适用场景:当你希望在终端里直接“点开”目录查看占用时ncdu 是首选。
# 安装
sudo apt-get install ncdu
# 启动并扫描根分区
sudo ncdu /
# 扫描特定方法。例如 /var/log
sudo ncdu /var/log
ncdu 会以树形结构展示每层大小,你可以使用方向键快速展开/收起,按 d 删除不需要的文件或目录。按理说,这一步骤往往能在几秒钟内定位到占比最大的几个目录。
四、结合 find 挖掘“大块头”文件
If you suspect a handful of huge files are eating space,use:
# 查找大于 500M 的文件并按大小倒序排列
find /path/to/search -type f -size +500M -exec ls -lh {} + | sort -k5 -hr
# 只列出前 10 条最大文件
find / -xdev -type f -printf '%s %p
' | sort -nr | head -n 10 | awk '{printf "%.2f MB\t%s
"。$1/1024/1024,$2}'
五、脚本化批量检查:每日自动报告
If you need a recurring snapshot of folder usage for audit or alerting,wrap commands into a tiny Bash script:
#!其实,/usr/bin/env bash TARGETS= REPORT="/tmp/disk_usage_$.txt" { echo "=== Disk Usage Report: $ ===" df -hT | grep "^/dev" echo "" for DIR in "${TARGETS}";do echo "> $DIR" du -sh "$DIR" 2>/dev/null du -sh "$DIR"/* 2>/dev/null | sort -hr | head -n 5 echo "" done }> "$REPORT" # 可选:发送邮件或 Slack 通知 # mail -s "Disk Usage Report" <"$REPORT" # curl -X POST ... # Slack webhook echo "Report saved to $REPORT"
六、常见误区与排查技巧
-
NFS 或挂载点失效:A directory may appear empty but actually resides on a failed mount;check with
alert df –T. -
.git、Docker 镜像层:Docker 容器镜像默认保存在
/var/lib/docker;使用docksystem prune –a 清理未使用镜像。 -
.tmp/.cache 文件:Cron jobs often leave temporary files under
/tmp ;periodic clean‑up via/etc/tmpfiles.d . -
LVM 快照:LVM snapshots can silently consume dozens of GB;list m with
.
七、快速定位实战案例
从案例一来看,根分区已满,却找不到大文件所在位置
-
a. 先确认是哪个挂载点紧张:
$ df -hT | grep '^/dev' -
b. 使用 ncdu 快速浏览:
$ sudo ncdu / # 在交互界面里直接看到前十名占比目录 -
c. 若想进一步细化到单个大文件:
$ find / -xdev‑type f ‑size +1G ‑exec ls ‑lh {} + | sort ‑k5 ‑hr
\end{ol}
说到案例二。/home 下某使用者家目录爆炸式增长
-
执行单使用者专属查询:
$ du –sh /home/alice/* $ du –sh /home/alice/.cache # 常见缓存堆积点 $ du –sh /home/alice/.local/share/Trash/* # 垃圾箱 -
再看针对性清理,
- 再看删除旧日志,rm ‑rf /home/alice/*.log.*
- 再看清空回收站,rm ‑rf /home/alice/.local/share/Trash/*
- 压缩或迁移大媒体文件。
- ← → 展开/折叠;
- d 删除选中文件或目录;老实说,
- q 退出。
-
官方手册这方面,
man duman dfman ncdu; -
在线监控网站可将
df指标持久化; - “Linux 硬盘空间管理”系列视频教程。
⚠️ 小心误删!执行任何删除命令前请务必确认方法和备份策略。.常用快捷键
推荐阅读 & 工具链接
©2026 运维技术分享 • 如有版权争议,请联系作者撤稿。

