在Linux中检查使用du命令的目录大小
在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最大文件或者最小文件/目录。