在 Linux 中使用 du 命令检查目录大小

在 Linux 中知道文件的大小很容易。 您所要做的就是在 ls 命令中使用 -l 和 -h 选项,它会显示文件大小以及文件权限和文件时间戳。 这是一个示例输出:

ls -lh tutorials
total 56K
-rwxr--r-- 1 abhishek abhishek  456 Mar  6 16:21 agatha.txt
-rw-r--r-- 1 abhishek abhishek    0 Apr 16 19:53 a.t
-rwxr--r-- 1 abhishek abhishek  140 Mar 22 16:41 bash_script.sh
-rw-rw-r-- 1 abhishek abhishek   95 Feb 11 13:12 cpluplus.cpp
-rw-r--r-- 1 abhishek abhishek  163 Apr 13 15:07 prog.py
-rw-r--r-- 1 abhishek abhishek  19K Mar 18 18:46 services
-rw-r--r-- 1 abhishek abhishek  356 Dec 11 21:35 sherlock.txt
-rwxrw-r-- 1 abhishek abhishek   72 Jan 21 15:44 sleep.sh
drwxr-xr-x 3 abhishek abhishek 4.0K Jan  4 20:10 target
drwxr-xr-x 2 abhishek abhishek 4.0K Apr 16 18:27 test_dir
-rw-rw-r-- 1 abhishek abhishek   55 Mar 11 16:28 text-file.txt

你会注意到一些奇怪的东西。 ls 命令显示所有目录的大小为 4 KB。 这不可能是正确的,可以吗? 当然不是。

Linux 中的文件夹或目录的大小可以使用 du 命令找到。 这里的 du 代表磁盘使用情况。 我将在本教程后面解释目录大小为 4.0K 背后的逻辑。 目前,让我们专注于获取目录大小。

如果要检查 Linux 中的目录大小,可以使用以下命令:

du -sh path_to_directory

这将以人类可读的格式为您提供所述目录的总大小,即 KB、MB 或 GB。

在 Linux 中使用 du 命令获取目录大小

我将向您展示可用于检查目录大小和磁盘利用率的 du 命令的各种示例。

du 命令的语法非常简单。

du [option] path_to_file_or_directory

让我们看看如何使用 du 命令获取 Linux 中的文件和目录大小信息。

这是我将在本教程中使用的“tutorials”目录的结构:

tree tutorials
.
├── agatha.txt
├── bash_script.sh
├── cpluplus.cpp
├── prog.py
├── services
├── sherlock.txt
├── sleep.sh
├── target
│   ├── agatha.txt
│   ├── file1.txt
│   └── past
│       ├── file1.txt
│       ├── file2.txt
│       └── source1
│           └── source2
│               └── file1.txt
├── test_dir
│   ├── c.xyz
│   ├── myzip1.zip
│   └── myzip2.zip
└── text-file.txt
5 directories, 16 files

现在,如果我在“tutorials”目录中运行 du 命令,它将显示所有子目录的大小,然后将所有子目录及其底部文件的大小相加。

du tutorials

这是教程目录的输出。

8 tutorials/target/past/source1/source2
12 tutorials/target/past/source1
24 tutorials/target/past
36 tutorials/target
12 tutorials/test_dir
100 tutorials

以人类可读的格式显示磁盘大小

现在du命令上面输出的问题是你不知道100是100KB还是100MB还是100GB。 不用担心,您可以更改此行为并以 人类可读格式 使用选项 -h。

du -h tutorials

这是现在更容易阅读的输出:

8.0K tutorials/target/past/source1/source2
12K tutorials/target/past/source1
24K tutorials/target/past
36K tutorials/target
12K tutorials/test_dir
100K tutorials

您可以对 MB 使用 -m 选项,对 KB 使用 -k 选项而不是 -h。 但即使大小小于 1 MB,它也会始终显示大小为 1MB。 这就是为什么使用 -h 选项总是更好的选择。

也显示文件的大小

您是否注意到教程目录有多个文件,但它们没有显示在 du 命令输出中? 这是因为虽然文件大小计入了目录大小的总和,但默认情况下不显示文件。

要显示文件的大小以及目录,可以使用 -a 选项。 如果将它与 -h 选项结合使用以获取人类可读格式的大小会更好。

du -ah tutorials

现在输出将显示文件以及目录:

4.0K tutorials/cpluplus.cpp
4.0K tutorials/prog.py
20K tutorials/services
4.0K tutorials/text-file.txt
4.0K tutorials/bash_script.sh
4.0K tutorials/target/file1.txt
4.0K tutorials/target/past/file2.txt
4.0K tutorials/target/past/file1.txt
4.0K tutorials/target/past/source1/source2/file1.txt
8.0K tutorials/target/past/source1/source2
12K tutorials/target/past/source1
24K tutorials/target/past
4.0K tutorials/target/agatha.txt
36K tutorials/target
4.0K tutorials/sherlock.txt
4.0K tutorials/test_dir/myzip1.zip
4.0K tutorials/test_dir/myzip2.zip
0 tutorials/test_dir/c.xyz
12K tutorials/test_dir
4.0K tutorials/sleep.sh
4.0K tutorials/agatha.txt
100K tutorials

额外提示:解开 4 KB 之谜

请注意,尺寸可能看起来已经四舍五入。 我的意思是所有尺寸都是4K的倍数。 实际上,除了空文件之外,所有文件的大小都至少为 4 KB。 这是巧合吗? 并不真地。

即使文件的文本以字节为单位,最小文件大小也是 4K,因为这是文件系统的最小块大小。 无论文件上的文本大小如何,都会在磁盘上分配至少一个 4KB 内存块。

由于内存块的大小为 4KB,因此您将看到的大小将始终为 4KB 的倍数。

现在,你可能已经知道了 一切都是文件 在 UNIX/Linux 中。 目录本质上是一个文件,其中包含有关它“包含”的所有文件的所有位置的信息。

因此,当您使用 ls 命令时,它会将目录视为文件并显示其大小,即一个内存块,因此显示的大小为 4KB。

仅显示 Linux 中目录的总大小

如果您发现 du 命令的输出过于冗长,并且只想以人类可读的格式查看目录的总大小,则可以使用 sum 选项 -s。

du -sh tutorials

现在输出将只是显示目录总大小的一行:

100K tutorials

显示多个目录的磁盘使用情况

并不是说您一次只能检查一个目录的大小。 您可以在 du 命令中指定多个目录。

为了 example,我将在这里使用 -sh 选项显示两个目录的总大小。

du -sh tutorials/target/ tutorials/test_dir

输出将分别显示两个目录的大小:

36K tutorials/target/
12K tutorials/test_dir

显示所有目录大小的总和

在上述 example,您分别看到了两个目录的总大小。 您可以使用选项 -c 显示输出中所有目录的总和。

du -csh tutorials/target/ tutorials/test_dir

正如您在输出中看到的那样,它总结了大小并为您提供了总计:

36K tutorials/target/
12K tutorials/test_dir
48K total

不显示子目录的大小

如果要检查当前文件夹中所有目录的大小怎么办? 默认情况下,du 命令将进入所有目录的子目录,如果嵌套目录太多,输出将变得难以弄清楚。

您可以做的是定义要检查的深度级别,同时显示子目录的大小。

因此,如果您想查看当前文件夹中目录的大小,可以将深度设置为 1,如下所示:

du -h --max-depth=1 tutorials

现在输出将仅显示当前目录中的子目录。 它不会比这更进一步。

36K tutorials/target
12K tutorials/test_dir
100K tutorials

如果您不记得 –max-depth,您可以使用它的简写形式 -d 标志:

du -h -d1 tutorials

在计算磁盘大小时排除某些类型的文件

du 命令为您提供排除某些类型文件的选项。 您可以将正则表达式与 –exclude 选项一起使用。

为了 example要计算除扩展名为 txt 的文件之外的所有文件的总和,可以使用此命令:

du -h --exclude="*.txt" tutorials

现在,如果您看到输出,目录的总大小将会减少:

4.0K tutorials/target/past/source1/source2
8.0K tutorials/target/past/source1
12K tutorials/target/past
16K tutorials/target
12K tutorials/test_dir
68K tutorials

额外提示:找到最大的子目录

您可以将 du 命令的输出与 sort 命令结合起来,按照目录大小的顺序对目录进行排序。

du -h --max-depth=1 tutorials | sort -rh

这将按其大小的相反顺序显示目录,即顶部的最大目录。

100K tutorials
36K tutorials/target
12K tutorials/test_dir

当然,最上面的一个是目录本身,但第二个是最大的子目录。

您可以进一步结合 head 命令或 tail 命令来获取 x 个最大的文件或最小的文件/目录。

你觉得有用吗?

我试图解释 du 命令在 Linux 中的所有基本用法。 但与往常一样,您可以在其中找到更多可用于命令的选项 它的手册页. 如果您只是想了解 Linux 中目录的大小,本教程应该会为您提供足够的信息。 如果要检查 Linux 中的磁盘空间,请使用 df 命令。

你喜欢这个教程吗? 对你有帮助吗? 在评论中告诉我。 如果你有其他关于 du 命令的很酷的技巧,为什么不与我们分享呢?