当前位置: 首页 > article >正文

Linux du 命令深度解析:从磁盘占用统计到目录空间分析

du 的核心原理:递归遍历 block 计数du的本质是统计文件占用的磁盘块数量,而不是文件大小。这两者有微妙但重要的区别。底层实现通过stat()系统调用获取每个文件的st_blocks字段:// 简化版 du 实现核心逻辑#includesys/stat.h#includedirent.hoff_tcalculate_usage(constchar*path){structstatst;if(lstat(path,st)0)return0;// 目录递归遍历if(S_ISDIR(st.st_mode)){DIR*diropendir(path);structdirent*entry;off_ttotal0;while((entryreaddir(dir))!NULL){if(strcmp(entry-d_name,.)0||strcmp(entry-d_name,..)0)continue;charfullpath[PATH_MAX];snprintf(fullpath,sizeof(fullpath),%s/%s,path,entry-d_name);totalcalculate_usage(fullpath);}closedir(dir);returntotal512;// 目录本身占用 1 个 block}// 文件:返回块数 * 512 字节returnst.st_blocks*512;}关键细节:st_blocks 是块数,不是字节数:实际占用 st_blocks * 512稀疏文件处理:一个 10GB 的稀疏文件可能只占用几个块目录本身占用:每个目录至少占用 4KB(一个 block)常用参数详解1.-h人类可读格式 Human-Readable Formatdu-h/var/log# 4.0K /var/log/apt# 12M /var/log/journal# 128M /var/log实现原理:遍历单位数组,找到最合适的单位:functionhumanReadable(bytes:number):string{constunits[B,K,M,G,T,P]leti0while(bytes1024iunits.length-1){bytes/1024i}return${bytes.toFixed(1)}${units[i]}}2.-s只显示总计du-sh/home/user# 2.5G /home/user跳过递归输出,只返回顶层统计。3.--max-depth控制层级du-h--max-depth1/var# 4.0K /var/tmp# 12M /var/log# 128M /var/lib# 145M /var这对于快速定位大目录非常有用。4.-a显示所有文件默认du只统计目录,-a让它也输出每个文件:du-ah/tmp# 4.0K /tmp/test.txt# 8.0K /tmp/data.json# 12K /tmp5.--exclude排除特定文件du-h--exclude*.log/vardu-h--excludenode_modules/home/user/project支持通配符,可以多次使用排除多种模式。实战场景与性能优化场景 1:定位大目录du-h--max-depth1/var|sort-hr# 145M /var# 128M /var/lib# 12M /var/log# 4.0K /var/tmpsort -hr按人类可读格式逆序排序,一眼看出最大的目录。场景 2:排除特定目录du-sh--excludenode_modules--exclude.git~/projects/*统计项目目录时排除依赖和版本控制目录,避免干扰。场景 3:查找大文件结合find使用:find/var-typef-size100M-execdu-h{}\;或者直接用du:du-ah/var|grep-E^[0-9.]G场景 4:监控目录增长watch-n60du -sh /var/log每分钟检查/var/log的空间占用,适合监控日志增长。性能考量1. 大目录遍历优化du遍历整个目录树,对于百万文件的目录会很慢。几个优化思路:–one-file-system:不跨文件系统,避免遍历挂载点–threshold:只显示超过指定大小的目录,减少输出并行处理:GNU parallel 并行统计子目录# 并行统计子目录find/var-maxdepth1-typed|paralleldu-sh2. 硬链接处理du默认会多次计数硬链接。使用-l参数只计数一次:du-lh/path/to/directory3. 缓存问题频繁运行du会影响文件系统缓存。可以用nocache命令避免:nocachedu-sh/large/directory与 df 的区别很多人混淆du和df:df:文件系统级别的空间统计,读取 superblockdu:目录/文件级别的空间统计,遍历目录树典型差异场景:df-h/var# Filesystem Size Used Avail Use% Mounted on# /dev/sda1 50G 45G 5.0G 90% /du-sh/var# 35G /var为什么df显示 45G,du只有 35G?已删除但仍被占用的文件:进程打开的文件被删除后,空间不会立即释放预留空间:ext4 默认预留 5% 给 root元数据开销:inode 表、journal 等查找已删除但仍被占用的文件:lsofL1|grepdeletedWeb 实现:浏览器端目录统计通过 File System Access API,可以在浏览器中实现类似功能:asyncfunctioncalculateDirectorySize(dirHandle:FileSystemDirectoryHandle):Promisenumber{lettotalSize0forawait(constentryofdirHandle.values()){if(entry.kindfile){constfileawaitentry.getFile()totalSizefile.size}elseif(entry.kinddirectory){constsubDirHandleawaitdirHandle.getDirectoryHandle(entry.name)totalSizeawaitcalculateDirectorySize(subDirHandle)}}returntotalSize}// 使用示例constdirHandleawaitwindow.showDirectoryPicker()constsizeawaitcalculateDirectorySize(dirHandle)console.log(Total size:${formatBytes(size)})注意:浏览器 API 统计的是文件大小,不是磁盘块数,与原生du有差异。常见陷阱1. 权限不足du会跳过无权限的目录,统计结果可能不完整:du: cannotreaddirectory/root:Permission denied使用sudo获取完整统计。2. 符号链接默认du不跟随符号链接。使用-L参数跟随:du-Lh/path/to/symlink3. 稀疏文件误判# 创建稀疏文件ddif/dev/zeroofsparse.imgbs1count0seek10Gls-lhsparse.img# -rw-r--r-- 1 user user 10G May 9 22:00 sparse.imgdu-hsparse.img# 0 sparse.img # 实际占用为 0ls显示文件大小,du显示磁盘占用。总结du命令虽然简单,但背后的设计蕴含了 Unix 哲学:专注做一件事,并把它做好。从 block 计数到递归遍历,从硬链接处理到稀疏文件支持,每个细节都经过精心设计。下次遇到磁盘空间问题,不妨试试这些组合:# 快速定位大目录du-h--max-depth1|sort-hr|head-10# 排除干扰项du-sh--excludenode_modules--exclude.git*# 监控目录增长watch-n60du -sh /var/log希望这篇对你理解du命令有帮助。更详细的命令参数可以查看: Linux du 命令参考相关工具:Linux df 磁盘空间监控 | 文件大小转换器

相关文章:

Linux du 命令深度解析:从磁盘占用统计到目录空间分析

du 的核心原理:递归遍历 block 计数 du 的本质是统计文件占用的磁盘块数量,而不是文件大小。这两者有微妙但重要的区别。 底层实现通过 stat() 系统调用获取每个文件的 st_blocks 字段: // 简化版 du 实现核心逻辑 #include <sys/stat.h> #include <dirent.h>o…...

基于Coolify与OpenClaw部署自托管AI智能体网关的完整实践指南

1. 项目概述&#xff1a;在Coolify上部署你的专属AI智能体网关 如果你对AI智能体&#xff08;Agent&#xff09;感兴趣&#xff0c;想拥有一个能帮你处理信息、自动执行任务的私人助手&#xff0c;但又觉得从零搭建环境、配置模型、管理服务太麻烦&#xff0c;那么今天分享的这…...

SMUDebugTool终极指南:解锁AMD Ryzen处理器底层调试与超频控制

SMUDebugTool终极指南&#xff1a;解锁AMD Ryzen处理器底层调试与超频控制 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: ht…...

SAP财务与资产模块:替代与校验的配置实战与场景解析[GGB0/GGB1/OBBH/OB28/OACS/OACV]

1. SAP财务与资产模块中的替代与校验功能解析 第一次接触SAP的替代(Substitutions)和校验(Validations)功能时&#xff0c;我完全被这些专业术语搞懵了。直到参与了一个跨国制造企业的SAP实施项目后&#xff0c;才真正理解它们的价值。简单来说&#xff0c;替代就像是一个智能…...

初次使用 Taotoken 接入 OpenAI 协议接口的完整流程与心得

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初次使用 Taotoken 接入 OpenAI 协议接口的完整流程与心得 作为一名开发者&#xff0c;在尝试将大模型能力集成到自己的项目中时&a…...

LLM提示词工程化实践:开源模板库提升AI对话效率与质量

1. 项目概述&#xff1a;一个为大型语言模型准备的“提示词武器库”如果你和我一样&#xff0c;经常和ChatGPT、Claude或者本地部署的Llama这类大语言模型打交道&#xff0c;那你肯定有过这样的体验&#xff1a;同一个问题&#xff0c;换种问法&#xff0c;得到的答案质量天差地…...

如何快速从图表图片中提取数据:WebPlotDigitizer完整指南

如何快速从图表图片中提取数据&#xff1a;WebPlotDigitizer完整指南 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 在科研和数据分析…...

STM32F103实战:EC11旋转编码器的精准驱动与抗干扰设计

1. EC11旋转编码器基础与STM32F103适配方案 EC11旋转编码器是嵌入式系统中常见的人机交互器件&#xff0c;通过旋转操作产生脉冲信号。与普通按键相比&#xff0c;它能提供方向感知和连续调节功能&#xff0c;在音量控制、参数调节等场景中尤为实用。STM32F103作为经典的Corte…...

别光看答案!用C语言亲手算算:10年后你的存款和房贷会怎样?(附谭浩强第五版第三章实战代码)

用C语言打造个人财务计算器&#xff1a;从GDP预测到房贷规划实战 当你第一次翻开谭浩强教授的《C程序设计》第三章&#xff0c;那些关于GDP增长、存款利息和房贷计算的习题可能看起来只是枯燥的数学练习。但换个角度想&#xff0c;这些公式正是构建个人财务规划工具的基础模块。…...

从零到一:如何用Python爬虫解锁拼多多电商数据价值

从零到一&#xff1a;如何用Python爬虫解锁拼多多电商数据价值 【免费下载链接】scrapy-pinduoduo 拼多多爬虫&#xff0c;抓取拼多多热销商品信息和评论 项目地址: https://gitcode.com/gh_mirrors/sc/scrapy-pinduoduo 你是否曾想过&#xff0c;那些在拼多多上热销的商…...

如何高效使用视频加速控制器:提升学习与工作效率的终极指南

如何高效使用视频加速控制器&#xff1a;提升学习与工作效率的终极指南 【免费下载链接】videospeed HTML5 video speed controller (for Google Chrome) 项目地址: https://gitcode.com/gh_mirrors/vi/videospeed 视频加速控制器&#xff08;Video Speed Controller&am…...

企业级公司日常考勤系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 现代企业管理中&#xff0c;考勤管理是人力资源管理的核心环节之一&#xff0c;直接影响企业的运营效率和员工的工作积极性。传统考勤方式依赖人工记录&#xff0c;容易出现数据错误、效率低下等问题&#xff0c;难以满足企业精细化管理的需求。随着信息技术的快速发展&am…...

Quartus Prime 18.0 标准版安装Cyclone V器件库,别再傻傻双击图标了!

Quartus Prime 18.0标准版安装Cyclone V器件库的完整避坑指南 当你第一次尝试在Quartus Prime 18.0标准版中安装Cyclone V器件库时&#xff0c;可能会遇到一个看似简单却令人困惑的问题——明明按照常规操作双击软件图标&#xff0c;却在点击"Install Device..."时遭…...

程序员学英语:用词根‘ori’和‘pan’搞定技术文档里的‘起源’与‘伙伴’

程序员学英语&#xff1a;用词根‘ori’和‘pan’破解技术文档高频词 技术文档里那些似懂非懂的英文词汇&#xff0c;往往成为程序员阅读源码、理解API的隐形门槛。当你在GitHub看到origin remote时&#xff0c;是否思考过为什么代码仓库的默认远程分支叫这个名字&#xff1f;当…...

AI驱动的消防员呼吸保护系统:闭环控制与动态优化

1. 消防员生命支持系统的技术挑战与AI解决方案在高温、有毒、低氧的火灾现场&#xff0c;消防员的呼吸保护装备直接关系到任务成败与人身安全。传统自给式呼吸器(SCBA)采用开环设计&#xff0c;氧气利用率不足30%&#xff0c;且无法动态调节供氧策略。我们团队开发的Galactic B…...

AI Workspace:统一管理团队AI编程工具配置与技能的工程实践

1. 项目概述&#xff1a;AI Workspace 是什么&#xff0c;以及它解决了什么问题如果你和你的团队已经开始在日常开发中大量使用 Cursor、Claude Code、GitHub Copilot 这类 AI 编程工具&#xff0c;那你一定遇到过下面这些让人头疼的场景&#xff1a;你在一个前端项目里&#x…...

Zenity实战:用Shell脚本构建轻量级GTK图形界面

1. Zenity入门&#xff1a;Shell脚本的图形化神器 第一次在终端里看到Zenity弹出一个日历对话框时&#xff0c;我正对着黑底白字的命令行界面发呆。原本需要用户输入复杂日期格式的脚本&#xff0c;突然变成了直观的图形化选择&#xff0c;这种转变让我意识到&#xff1a;原来给…...

基于Alexa与AWS Lambda的港铁实时查询语音技能开发实战

1. 项目概述&#xff1a;一个为香港地铁通勤者打造的智能助手如果你在香港生活或工作&#xff0c;每天依赖港铁&#xff08;MTR&#xff09;通勤&#xff0c;那么“下一班车几点到&#xff1f;”这个问题&#xff0c;恐怕是你每天都要问上好几遍的灵魂拷问。站台上人潮涌动&…...

5分钟掌握ComfyUI_essentials:解锁AI绘画的终极创作工具箱

5分钟掌握ComfyUI_essentials&#xff1a;解锁AI绘画的终极创作工具箱 【免费下载链接】ComfyUI_essentials 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_essentials 还在为ComfyUI中缺少关键功能而烦恼吗&#xff1f;ComfyUI_essentials就是你的终极解决方案…...

IWR1642与mmWave Studio实战:从参数配置到数据解析的完整指南

1. IWR1642与mmWave Studio初探&#xff1a;为什么参数配置如此重要 第一次接触TI的IWR1642评估板和mmWave Studio软件时&#xff0c;很多人会被各种参数搞得晕头转向。我刚开始用的时候也是这样&#xff0c;看着界面上密密麻麻的选项&#xff0c;完全不知道从哪下手。后来才发…...

解决跨平台表情显示难题:Noto Emoji技术实现深度解析

解决跨平台表情显示难题&#xff1a;Noto Emoji技术实现深度解析 【免费下载链接】noto-emoji Noto Emoji fonts 项目地址: https://gitcode.com/gh_mirrors/no/noto-emoji 在当今数字通信时代&#xff0c;表情符号已成为不可或缺的表达元素。然而&#xff0c;开发者面临…...

从售前到落地:我是如何用Apache Atlas 2.0 + Hive/Sqoop为数据治理项目搭建元数据管理原型的

从售前到落地&#xff1a;构建数据治理原型的实战指南 去年夏天&#xff0c;我接到一个紧急任务&#xff1a;客户要求在两周内看到数据治理方案的实际效果演示。这不是普通的POC&#xff0c;而是一次决定数百万合同成败的关键验证。经过72小时不眠不休的技术攻关&#xff0c;我…...

snip CLI代理:为AI编程助手智能过滤终端输出,节省90%以上令牌成本

1. 项目概述&#xff1a;snip&#xff0c;一个为AI编程助手节省60-90%上下文令牌的CLI代理 如果你和我一样&#xff0c;每天都在用Claude Code、Cursor或者GitHub Copilot这类AI编程助手&#xff0c;那你肯定也遇到过这个让人头疼的问题&#xff1a;每次让AI运行一个简单的 g…...

深入探讨.NET 6中WeakHandle的垃圾回收机制

在.NET框架中,垃圾回收(Garbage Collection, GC)是管理内存的重要机制之一。而在.NET 6版本中,我们发现了一个关于弱引用(Weak Reference)的有趣现象。下面我们将通过一个实例来详细分析这个问题。 问题描述 以下是一个简单的C#代码示例,展示了在.NET 6下使用GCHandle…...

神经网络训练绝对值函数的奥秘

在机器学习和深度学习的世界里,神经网络的训练过程充满了各种有趣的现象和挑战。本文将详细讨论如何使用神经网络来拟合一个看似简单的函数——绝对值函数(|x|),并探讨为何在某些情况下需要增加网络的层数来获得更好的拟合效果。 问题背景 假设我们想用神经网络来学习函数…...

主机上的数据管理:如何创建和管理记录结构化的PS文件

在主机环境中工作,尤其是对于新手来说,理解和操作数据集的结构化存储是一个关键技能。今天,我们将详细探讨如何在IBM主机上创建和管理一个结构化的物理顺序(PS)文件,用于记录月度支出,并通过实例一步步讲解如何完成这一任务。 1. 创建PS文件 在开始之前,确保您已经熟…...

Excel VBA 动态下拉列表与错误处理

在Excel中使用VBA(Visual Basic for Applications)编写脚本,可以实现许多自动化操作和功能扩展。本文将结合实例,详细介绍如何在Excel中使用VBA创建动态下拉列表,并探讨一些常见的错误及其解决方案。 背景 假设你正在管理一个项目计划表,用户需要能够动态添加和删除行,…...

高效OCR文字识别:Umi-OCR免费离线批量处理工具终极指南

高效OCR文字识别&#xff1a;Umi-OCR免费离线批量处理工具终极指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多国语…...

ThinkPad风扇控制终极指南:TPFanCtrl2让你的笔记本静音又高效

ThinkPad风扇控制终极指南&#xff1a;TPFanCtrl2让你的笔记本静音又高效 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 ThinkPad用户们&#xff0c;你是否厌倦了笔记…...

115.YOLOv5/v8核心原理(CSPDarknet+SPPF)+ Ultralytics工程实现

摘要 YOLO(You Only Look Once)作为目标检测领域的一阶段经典算法,以端到端、实时性高、精度均衡著称。本文从YOLOv5/v8核心原理出发,系统讲解锚框机制、损失函数、模型结构等关键技术点,并基于Ultralytics官方框架,提供从数据准备、模型训练、评估到推理部署的完整可运…...