在 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。 这不可能是正确的,对吧? 当然不是。
可以使用 du 命令查看 Linux 中文件夹或目录的大小。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 中获取文件和目录的大小信息。
以下是我将在本教程中使用的“教程”目录的结构:
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
您可以使用 -m 选项表示 MB,使用 -k 选项表示 KB,而不是 -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 命令中指定多个目录。
例如,我将使用 -sh 选项来显示此处两个目录的总大小。
du -sh tutorials/target/ tutorials/test_dir
输出将分别显示两个目录的大小:
36K tutorials/target/
12K tutorials/test_dir
显示所有目录大小总计
在上面的例子中,您分别看到了两个目录的总大小。您可以使用选项 -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 选项一起使用。
例如,要计算除扩展名为 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 个最大的文件或最小的文件/目录。
您觉得它有用吗?
我已尝试解释 Linux 中 du 命令的所有基本用法。但一如既往,您可以在其手册页中找到该命令的更多选项。如果您只是想了解 Linux 中目录的大小,本教程应该会为您提供足够的信息。如果您想检查 Linux 中的磁盘空间,请使用 df 命令。
您喜欢本教程吗?它对您有帮助吗?请在评论中告诉我。如果您有其他有关 du 命令的精彩提示,为什么不与我们分享呢?