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

时间:2020-03-05 15:26:45  来源:igfitidea点击:

在Linux中知道文件的大小很容易。
我们所要做的就是使用ls命令使用-l和-h选项,它将显示文件大小以及文件权限和文件时间戳。

这是一个示例输出:

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

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

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

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

du -sh path_to_directory

这将为我们提供人为可读格式的所述目录的总大小,例如:KB,MB或者GB。

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

将介绍可以用于检查目录大小和磁盘利用率的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

现在,如果我在"教程"目录中运行du命令,它将显示所有子目录的大小,然后显示所有子目录的大小和它底部的文件。

du tutorials

这是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

我们可以为KB而不是-h使用-M选项为MB和-k选项使用-m选项。
但即使尺寸小于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命令将进入所有目录的子目录,如果我们有太多嵌套目录,则难以弄清楚输出。

我们可以做的是定义深度级别,同时显示子目录的大小。

因此,如果要在当前文件夹中看到目录的大小,可以将深度设置为如下:

du -h --max-depth=1 tutorials

现在输出将仅在当前目录中显示子目录。
它不会比这更重要。

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

如果我们不记得-Max深度,则可以使用其简短的表单-D标志:

du -h -d1 tutorials

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

du命令为我们提供了排除某些类型的文件选项。
我们可以使用RegEx以及-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命令或者尾部命令组合以获取x最大文件或者最小文件/目录。