Linux磁盘使用统计命令du和df区别

linux磁盘使用统计命令du和df区别

du

df

这两个命令,在Linux系统里都是我们用来查看磁盘空间的神器,但它们统计的角度和方法截然不同。说白了,

df

关注的是文件系统整体的“账本”,它看的是哪些块被标记为已用,哪些是空闲的;而

du

则更像是一个“审计员”,它会挨个去数文件和目录的大小,然后加起来告诉你。这就导致它们的结果经常不一样,尤其是在系统出现一些“异常”情况时,这种差异会变得非常明显。理解它们的区别,是准确判断磁盘空间使用情况的关键。

解决方案

df

命令,全称是“disk free”,它主要报告的是文件系统(filesystem)的整体使用情况。当你运行

df -h

时,它会遍历所有已挂载的文件系统,显示每个文件系统的总容量、已用空间、可用空间以及使用百分比。它的数据来源是文件系统的元数据,也就是文件系统本身记录的块分配信息。所以,

df

的数据是“权威的”,它反映了操作系统内核层面,文件系统到底认为自己用了多少空间。

du

命令,全称是“disk usage”,它则是从文件和目录的角度出发。当你对某个目录运行

du -sh

时,它会递归地遍历该目录下的所有文件和子目录,然后把所有文件的大小累加起来。它统计的是“文件实际占用的空间”,也就是我们通常理解的,一个文件有多大。

du

的数据是“用户视角的”,它反映了你通过文件系统路径能看到的所有文件加起来有多大。

两者最大的区别在于,

df

统计的是“分配给文件系统的块”,而

du

统计的是“文件内容所占的块”。这种差异在大多数时候并不明显,但一旦出现某些特定情况,就会导致巨大的差异。

为什么df和du的统计结果经常不一致?

这绝对是Linux系统管理员最常遇到的困惑之一。我个人觉得,最主要的原因,也是最让人头疼的,就是“被删除但仍被进程占用的文件”。

想象一下,你有一个日志文件,比如

/var/log/myapp.log

,它可能每天都在增长。某个日志轮转程序为了释放空间,把这个文件删除了(

rm /var/log/myapp.log

),然后创建了一个新的同名文件。这时候,

du

命令会立刻发现旧文件不见了,所以它的统计结果会变小。但是,如果你的

myapp

服务进程在文件被删除时,仍然持有对那个旧日志文件的文件句柄(descriptor),那么操作系统就不会真正释放那些被旧文件占用的磁盘块。在文件系统的角度看来,这些块仍然是“已使用”状态。所以,

df

的统计结果就不会下降,甚至可能保持不变。

要验证这种情况,你可以使用

lsof

命令。运行

lsof | grep deleted

,它会列出所有被进程打开但已经被删除的文件。你会看到类似这样的输出:

COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAMEjava      12345   root   12w   REG    8,1 12345678 1234 /var/log/myapp.log (deleted)

这里的

SIZE/OFF

就是那个被删除文件仍然占用的空间。解决办法通常是重启相关的服务进程,让它释放旧的文件句柄,这样文件系统才会真正回收那些块。

再者,还有一些不那么常见但也会导致差异的情况。比如:

硬链接:

du

在计算时可能会多次计算同一个文件的空间(取决于参数),而

df

只计算一次实际的磁盘块。稀疏文件(Sparse Files): 稀疏文件在磁盘上并不占用实际的零字节空间,

du

通常会报告其逻辑大小(包含空洞),而

df

则报告其物理大小(实际占用的块)。文件系统块大小:

df

报告的是文件系统层面的块使用情况,而

du

则可能受到其自身默认块大小的影响。不过话说回来,这通常不会造成巨大的差异。权限问题:

du

在遍历目录时,如果遇到没有读取权限的目录或文件,它就无法计算其大小,从而导致统计结果偏小。

df

则没有这个问题,因为它直接查询文件系统元数据。

如何准确查找占用磁盘空间的文件或目录?

当你想知道具体是哪些文件或目录吃掉了你的磁盘空间时,

du

命令就是你的最佳拍档。它能让你一层层地钻进去,找到那些“大胃王”。

最常用的组合是

du -sh

s

(summary):只显示总计,不列出每个子目录。

h

(human-readable):以人类可读的格式显示大小(KB, MB, GB)。

例如,要查看当前目录下所有文件和子目录的总大小:

du -sh .

如果你想知道当前目录下,哪些子目录占用空间最大,可以这样:

du -sh * | sort -rh | head -n 10

这条命令会列出当前目录下所有文件和目录的大小,然后按大小倒序排列,并显示前10个最大的。这招特别好用,能让你快速定位问题。

魔乐社区 魔乐社区

天翼云和华为联合打造的AI开发者社区,支持AI模型评测训练、全流程开发应用

魔乐社区 102 查看详情 魔乐社区

如果你要检查某个特定路径,比如

/var/log

,可以这样做:

du -sh /var/log

然后,如果你想深入到

/var/log

里面,看是哪个子目录或文件最大,可以:

du -sh /var/log/* | sort -rh | head -n 10

需要注意的是,

du

默认会跨越文件系统边界。如果你只想统计当前文件系统内的使用情况,不想把挂载点下的其他文件系统也算进来,可以使用

-x

参数:

du -shx /path/to/directory

这样,

du

就不会进入

/path/to/directory

下的任何挂载点。

对于更复杂的磁盘空间分析,我个人推荐使用

ncdu

这个工具。它是一个基于ncurses的磁盘使用分析器,界面非常直观,你可以像在文件管理器里一样,上下左右移动,查看每个目录的大小,甚至直接删除文件。安装也很简单,比如在Debian/Ubuntu上就是

sudo apt install ncdu

,CentOS/RHEL上是

sudo yum install ncdu

磁盘空间不足时,应该优先检查哪些地方?

当你的服务器突然报出磁盘空间不足的警报时,别慌,我们有套相对高效的排查流程。

确认哪个文件系统满了: 这是第一步,也是最关键的一步。运行

df -h

,一眼就能看出是哪个挂载点(比如

/

/var

/home

)的空间快用完了。这能帮你缩小排查范围。

检查“幽灵文件”(deleted but open files): 如果

df

显示某个分区快满了,但你用

du -sh /path/to/that/partition

去统计,却发现

du

的结果远小于

df

,那么八九不离十,就是有被删除但仍被进程占用的文件。这时候,毫不犹豫地运行

lsof | grep deleted

。找到那些占用大空间且被标记为

(deleted)

的文件,然后根据

COMMAND

PID

定位到对应的服务。如果可以,重启该服务,或者直接kill掉它(谨慎操作,确保不会影响业务),通常就能立刻释放空间。

定位大文件或大目录: 如果

df

du

的结果都显示空间被大量占用,那么就是有实实在在的文件在吃空间。这时候,你需要深入到第一步确认的那个满载的文件系统根目录,用

du

命令进行排查。

比如,如果

/

分区满了,你可以从

/

开始:

du -shx /* | sort -rh | head -n 20

。这会列出根目录下最大的20个一级目录。根据结果,你就能知道是哪个目录占用了大部分空间(比如

/var

/opt

/home

)。然后,继续深入那个大目录,重复这个过程,直到你找到具体的“罪魁祸首”文件或目录。例如,如果发现

/var

很大,那就

du -shx /var/* | sort -rh | head -n 20

常见的“大胃王”区域:

/var/log/

:日志文件,尤其是那些没有配置好轮转策略的应用程序日志,或者系统日志(如

syslog

journal

)。

/tmp/

:临时文件目录,虽然系统会定期清理,但有时会有残留。

/home/

:用户家目录,用户可能下载了大量文件、图片、视频等。

/opt/

:一些第三方软件的安装目录,有时会放置大量数据或备份。

/var/lib/docker/

:如果你使用了Docker,这个目录会存放镜像和容器的数据。数据库文件:MySQL、PostgreSQL等数据库的数据文件通常会非常大。备份目录:如果你有定期备份,但没有及时清理旧备份,它们会迅速填满磁盘。

利用

find

命令: 当你需要查找特定类型、大小或时间的旧文件时,

find

命令非常强大。

查找所有大于1GB的文件:

find /path/to/check -type f -size +1G -print0 | xargs -0 du -h

查找所有在30天前修改过的文件:

find /path/to/check -type f -mtime +30

结合

delete

参数(谨慎使用):

find /path/to/check -type f -name "*.log" -mtime +7 -delete

(删除7天前的

.log

文件)

记住,在删除任何文件之前,务必确认其重要性,或者先将其移动到其他位置作为备份。误删关键系统文件可能会导致系统崩溃。

以上就是Linux磁盘使用统计命令du和df区别的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/430709.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月7日 13:45:00
下一篇 2025年11月7日 13:45:29

相关推荐

  • Bear 博客上的浅色/深色模式分步指南

    我最近使用偏好颜色方案媒体功能与 light-dark() 颜色函数相结合,在我的 bear 博客上实现了亮/暗模式切换。 我是这样做的。 第 1 步:设置 css css 在过去几年中获得了一些很酷的新功能,包括 light-dark() 颜色函数。此功能可让您为任何元素指定两种颜色 &#8211…

    2025年12月24日
    100
  • 如何在 Web 开发中检测浏览器中的操作系统暗模式?

    检测浏览器中的操作系统暗模式 在 web 开发中,用户界面适应操作系统(os)的暗模式设置变得越来越重要。本文将重点介绍检测浏览器中 os 暗模式的方法,从而使网站能够针对不同模式调整其设计。 w3c media queries level 5 最新的 web 标准引入了 prefers-color…

    2025年12月24日
    000
  • 如何使用 CSS 检测操作系统是否处于暗模式?

    如何在浏览器中检测操作系统是否处于暗模式? 新发布的 os x 暗模式提供了在 mac 电脑上使用更具沉浸感的用户界面,但我们很多人都想知道如何在浏览器中检测这种设置。 新标准 检测操作系统暗模式的解决方案出现在 w3c media queries level 5 中的最新标准中: 立即学习“前端免…

    2025年12月24日
    000
  • 如何检测浏览器环境中的操作系统暗模式?

    浏览器环境中的操作系统暗模式检测 在如今科技的海洋中,越来越多的设备和软件支持暗模式,以减少对眼睛的刺激并营造更舒适的视觉体验。然而,在浏览器环境中检测操作系统是否处于暗模式却是一个令人好奇的问题。 检测暗模式的标准 要检测操作系统在浏览器中是否处于暗模式,web 开发人员可以使用 w3c 的媒体查…

    2025年12月24日
    200
  • 浏览器中如何检测操作系统的暗模式设置?

    浏览器中的操作系统暗模式检测 近年来,随着用户对夜间浏览体验的偏好不断提高,操作系统已开始引入暗模式功能。作为一名 web 开发人员,您可能想知道如何检测浏览器中操作系统的暗模式状态,以相应地调整您网站的设计。 新 media queries 水平 w3c 的 media queries level…

    2025年12月24日
    000
  • 如何在 VS Code 中解决折叠代码复制问题?

    解决 VS Code 折叠代码复制问题 在 VS Code 中使用折叠功能可以帮助组织长代码,但使用复制功能时,可能会遇到只复制可见部分的问题。以下是如何解决此问题: 当代码被折叠时,可以使用以下简单操作复制整个折叠代码: 按下 Ctrl + C (Windows/Linux) 或 Cmd + C …

    2025年12月24日
    000
  • 我在学习编程的第一周学到的工具

    作为一个刚刚完成中学教育的女孩和一个精通技术并热衷于解决问题的人,几周前我开始了我的编程之旅。我的名字是OKESANJO FATHIA OPEYEMI。我很高兴能分享我在编码世界中的经验和发现。拥有计算机科学背景的我一直对编程提供的无限可能性着迷。在这篇文章中,我将反思我在学习编程的第一周中获得的关…

    2025年12月24日
    000
  • 网络进化!

    Web 应用程序从静态网站到动态网页的演变是由对更具交互性、用户友好性和功能丰富的 Web 体验的需求推动的。以下是这种范式转变的概述: 1. 静态网站(1990 年代) 定义:静态网站由用 HTML 编写的固定内容组成。每个页面都是预先构建并存储在服务器上,并且向每个用户传递相同的内容。技术:HT…

    2025年12月24日
    000
  • 为什么多年的经验让我选择全栈而不是平均栈

    在全栈和平均栈开发方面工作了 6 年多,我可以告诉您,虽然这两种方法都是流行且有效的方法,但它们满足不同的需求,并且有自己的优点和缺点。这两个堆栈都可以帮助您创建 Web 应用程序,但它们的实现方式却截然不同。如果您在两者之间难以选择,我希望我在两者之间的经验能给您一些有用的见解。 在这篇文章中,我…

    2025年12月24日
    000
  • 姜戈顺风

    本教程演示如何在新项目中从头开始配置 django 和 tailwindcss。 django 设置 创建一个名为 .venv 的新虚拟环境。 # windows$ python -m venv .venv$ .venvscriptsactivate.ps1(.venv) $# macos/linu…

    2025年12月24日
    000
  • CSS如何实现任意角度的扇形(代码示例)

    本篇文章给大家带来的内容是关于CSS如何实现任意角度的扇形(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 扇形制作原理,底部一个纯色原形,里面2个相同颜色的半圆,可以是白色,内部半圆按一定角度变化,就可以产生出扇形效果 扇形绘制 .shanxing{ position:…

    2025年12月24日
    000
  • jimdo能否添加html5弹窗_jimdo弹窗html5代码实现与触发条件【技巧】

    可在Jimdo实现HTML5弹窗的四种方法:一、用内置“弹窗链接”模块;二、通过HTML区块注入精简dialog结构(需配合内联CSS);三、外部托管HTML+iframe嵌入;四、纯CSS :target伪类无JS方案。 如果您希望在Jimdo网站中实现HTML5弹窗效果,但发现平台默认不支持直接…

    2025年12月23日
    000
  • 响应式HTML5按钮适配不同屏幕方法【方法】

    实现响应式HTML5按钮需五种方法:一、CSS媒体查询按max-width断点调整样式;二、用rem/vw等相对单位替代px;三、Flexbox控制容器与按钮伸缩;四、CSS变量配合requestAnimationFrame优化的JS动态适配;五、Tailwind等框架的响应式工具类。 如果您希望H…

    2025年12月23日
    000
  • jimdo如何添加html5表单_jimdo表单html5代码嵌入与字段设置【实操】

    可通过嵌入HTML5表单代码、启用字段验证属性、添加CSS样式反馈及替换提交按钮并绑定JS事件四种方式在Jimdo实现自定义表单行为。 如果您在 Jimdo 网站中需要自定义表单行为或字段逻辑,而内置表单编辑器无法满足需求,则可通过嵌入 HTML5 表单代码实现更灵活的控制。以下是具体操作步骤: 一…

    2025年12月23日
    000
  • vs里面怎么html5_VS新建项目选HTML5模板或文件选HTML5创建【创建】

    Visual Studio 中创建 HTML5 项目可通过四种方式:一、新建空 ASP.NET Web 应用程序后添加 HTML 页面;二、使用 UWP 的 Blank App 模板;三、直接新建 HTML 文件并手动编写标准 HTML5 结构;四、安装 Web Template Studio 扩展…

    2025年12月23日
    000
  • html5能否禁用搜索框自动填充_html5autocomplete关闭方法【教程】

    禁用HTML5搜索框自动填充有五种方法:一、设autocomplete=”off”;二、随机化name/id值;三、用无效autocomplete值如”nope”;四、JS动态设置autocomplete;五、设autocomplete=”…

    2025年12月23日
    000
  • html5怎么导视频_html5用video标签导出或Canvas转DataURL获视频【导出】

    HTML5无法直接导出video标签内容,需借助Canvas捕获帧并结合MediaRecorder API、FFmpeg.wasm或服务端协同实现。MediaRecorder适用于WebM格式前端录制;FFmpeg.wasm支持MP4等格式及精细编码控制;服务端方案适合高负载场景。 如果您希望在网页…

    2025年12月23日
    300
  • 如何查看编写的html_查看自己编写的HTML文件效果【效果】

    要查看HTML文件的浏览器渲染效果,需确保文件以.html为扩展名保存、用浏览器直接打开、利用开发者工具调试、必要时启用本地HTTP服务器、或使用编辑器实时预览插件。 如果您编写了HTML代码,但无法直观看到其在浏览器中的实际渲染效果,则可能是由于文件未正确保存、未使用浏览器打开或文件扩展名设置错误…

    2025年12月23日
    400
  • html5怎么加php_html5用Ajax与PHP后端交互实现数据传递【交互】

    HTML5不能直接运行PHP,需通过Ajax与PHP通信:前端用fetch发送请求,PHP接收处理并返回JSON,前端解析响应更新DOM;注意跨域、编码、CSRF防护和输入过滤。 HTML5 本身是前端标记语言,不能直接运行 PHP 代码,但可以通过 Ajax(异步 JavaScript)与 PHP…

    2025年12月23日
    300
  • html5怎么设置单选_html5用input type=”radio”加name设单选按钮组【设置】

    HTML5 使用 type=”radio” 实现单选功能,需统一 name 值构成互斥组;通过 checked 设默认项;可用 CSS 隐藏原生控件并自定义样式;推荐用 fieldset/legend 增强语义;required 可实现必填验证。 如果您希望在网页中创建一组互…

    2025年12月23日
    200

发表回复

登录后才能评论
关注微信