0

0

Linux统计目录大小du命令实例

P粉602998670

P粉602998670

发布时间:2025-09-17 12:17:01

|

362人浏览过

|

来源于php中文网

原创

使用 du 命令可统计文件和目录磁盘占用,结合 -s、-h、--max-depth、-a 等选项实现简洁或详细输出;通过 du -h /path | sort -rh | head -n 10 快速定位最大占用目录;du 与 df 不同,前者查看文件级占用,后者查看文件系统级空间;结合 find 与 xargs 可精确统计特定类型文件或排除指定目录。

linux统计目录大小du命令实例

du
命令在 Linux 中是一个极其强大的工具,专门用来统计文件和目录所占用的磁盘空间。它能让你迅速了解某个文件或目录究竟吞噬了多少存储,是排查磁盘空间不足问题的得力助手,也能帮你追踪数据增长的趋势。

解决方案

在使用

du
命令时,你会发现它有很多灵活的选项,能够满足不同的统计需求。最基础的用法是直接跟上目录路径,它会递归地列出该目录下所有子目录和文件的空间占用。

比如,我想看看当前目录的总体大小,我通常会这么做:

du -sh .

这里的

-s
(summary) 选项会只显示总计,而不是列出每个子目录的详细信息,而
-h
(human-readable) 则会将结果以人类更易读的单位(如 K, M, G)显示出来。这比默认的以块(block)为单位显示要直观得多。

如果你想深入了解某个特定目录,比如

/var/log
到底有多少日志文件,占用了多少空间,但又不想看到每个日志文件的详细大小,只想看子目录的总和,可以这样:

du -h --max-depth=1 /var/log

--max-depth=1
限制了
du
只下探一层目录,这在排查哪个子目录是“大户”时非常有用。我个人就很喜欢这个选项,它能让我快速锁定问题区域,而不会被海量的文件列表淹没。

有时候,我需要知道所有文件(包括隐藏文件)和目录的大小,这时候

-a
选项就派上用场了:

du -ah /path/to/directory

这会列出路径下所有文件和目录的大小,同样以人类可读的格式显示。

Linux统计目录大小du命令实例

如何快速找出Linux系统中占用空间最大的目录?

这绝对是运维或开发人员最常遇到的场景之一:服务器磁盘报警,你需要马上找出是哪个目录在“作妖”。我通常会先定位到可能出问题的挂载点,然后用

du
结合
sort
head
来快速筛选。

假设我的

/data
分区快满了,我想知道是哪个子目录占用了大部分空间。我会这么做:

sudo du -h /data | sort -rh | head -n 10

这里

sudo
是为了确保我有权限读取所有文件。
du -h /data
会列出
/data
下所有文件和目录的大小(递归)。然后,我用管道
|
把结果传递给
sort -rh
-r
表示反向排序(从大到小),
-h
则是让
sort
也能理解人类可读的单位。最后,
head -n 10
截取前10行,也就是占用空间最大的10个目录或文件。

这个组合命令简直是我的救星,它能让我迅速从茫茫多的目录中揪出真正的“胖子”,省去了大量手动检查的时间。我记得有一次,就是靠这个命令,我发现一个日志归档脚本出了问题,导致一个旧目录里堆积了TB级的日志文件,差点把整个文件系统撑爆。

Rezi.ai
Rezi.ai

一个使用 AI 自动化创建简历平台

下载
Linux统计目录大小du命令实例

du命令与df命令有何不同,何时选择使用它们?

这是一个经典的混淆点,很多人搞不清

du
df
的区别,甚至会觉得它们是重复的。但实际上,它们关注的焦点完全不同。

du
(disk usage) 统计的是文件和目录实际占用的磁盘空间。它会遍历你指定路径下的所有文件和目录,累加它们的大小。这意味着,如果一个文件被多个硬链接引用,
du
可能会多次计算它的空间(尽管有些
du
版本会有优化,但基本原理是这样),或者如果文件是稀疏文件(sparse file),
du
报告的可能是其“逻辑大小”或“实际存储大小”,这取决于具体实现和选项。更重要的是,
du
报告的是文件系统内部的数据块使用情况。

df
(disk free) 统计的是文件系统的整体使用情况,它报告的是文件系统层面上的已用空间、可用空间和总空间。
df
不会去遍历文件,它直接查询文件系统的元数据来获取这些信息。这意味着,
df
看到的是文件系统分配给文件的块数,包括了文件系统本身的开销,以及一些可能已经删除但尚未释放的块(比如进程还在持有文件句柄的情况)。

我通常是这样使用的:

  • df -h
    :当我需要快速了解整个服务器或某个分区还剩下多少空间时,我会用
    df
    。比如,我想知道
    /
    根目录或者
    /home
    分区是不是快满了,
    df
    能给我一个宏观的概览。
  • du -sh /path
    :当我发现
    df
    显示某个分区空间不足,需要找出具体是哪个目录或文件导致了空间消耗时,我就会切换到
    du
    。它能帮我钻进文件系统内部,定位到具体的“罪魁祸首”。

简而言之,

df
看的是“水池的总量和水位”,而
du
看的是“水池里每条鱼和每块石头有多大”。两者结合使用,才能全面地掌握磁盘空间使用状况。

Linux统计目录大小du命令实例

如何精确统计特定文件类型或排除某些文件的目录大小?

有时候,我们不光想知道总大小,还想进行更细致的分析。比如,我只想知道一个项目目录下所有的

.log
文件占了多少空间,或者我想统计大小,但排除掉所有
node_modules
目录。
du
本身就带有一些过滤功能,或者我们可以结合其他命令来实现。

如果你想排除某些目录或文件模式,

du
--exclude
选项就非常方便。比如说,在一个开发项目中,
node_modules
目录通常会非常庞大,我可能想在统计项目大小时忽略它:

du -h --exclude="node_modules" --exclude="*.git" /path/to/my/project

这个命令会统计

/path/to/my/project
目录下所有文件和子目录的大小,但会跳过名为
node_modules
的目录以及所有以
.git
结尾的文件或目录。你可以多次使用
--exclude
来排除不同的模式。

如果我的需求更复杂,比如我只想统计所有

.jpg
图像文件的大小,这时候单独使用
du
就不够了。我会结合
find
命令来实现:

find /path/to/images -name "*.jpg" -print0 | xargs -0 du -ch

这个命令链的逻辑是这样的:

  1. find /path/to/images -name "*.jpg" -print0
    :在指定路径下查找所有以
    .jpg
    结尾的文件,并用
    print0
    将文件名以 null 字符分隔输出。这样做是为了正确处理文件名中可能包含空格或特殊字符的情况。
  2. xargs -0 du -ch
    xargs -0
    接收
    find
    输出的 null 分隔的文件名列表,然后对每个文件执行
    du -ch
    命令。最终,
    du -ch
    会计算每个
    .jpg
    文件的大小,并在最后给出一个总和(因为有
    -c
    选项)。

这种组合命令的灵活性非常高,能让我根据实际需求,精确地筛选出需要统计的目标,这对于进行精细化的存储审计和清理工作非常有帮助。我发现很多时候,只用

du
的基本功能是不够的,灵活运用管道和
find
xargs
这些工具,才能真正发挥出 Linux 命令行的强大威力。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

409

2023.09.04

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

442

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

978

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

579

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

275

2023.07.24

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.4万人学习

Git 教程
Git 教程

共21课时 | 4.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号