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

使用 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级的日志文件,差点把整个文件系统撑爆。

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

法语写作助手

法语助手旗下的ai智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。

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

查看详情 Linux统计目录大小du命令实例

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 命令行的强大威力。

linux git node 工具 linux系统 区别 NULL sort 递归 var git linux

上一篇
下一篇