如何在 Linux 中获取目录的大小
了解 Linux 中目录的大小并不像听起来那么简单。 “ls -s ”命令将列出文件和子目录及其大小。但是,为目录指定的大小(大约 4096 字节)并不是磁盘使用情况。目录的大小是目录元数据的大小。
元数据是关于数据的数据。表观大小是对计算机普通用户而言重要的数据大小。用户的信件、图像、视频等内容(文字)构成了外观尺寸。该数据不会任意保存在计算机中。表观大小的数据必须以控制方式保存。它必须是可识别的。它必须是完整的。对此还有其他要求。为了实现这些额外的要求,需要一些额外的数据,这些额外的数据就是元数据。
请记住,一个卷中只有一个目录。其余的都是子目录。根目录下产生子目录,子目录下又产生其他子目录。然而,子目录通常简称为目录。因此,只有一棵目录树。
因此,“ls -s”对于获取目录的大小没有用处。那么哪个命令有用呢? – du 命令。 “du”代表磁盘使用情况。它打印目录的磁盘使用情况。
本文介绍了 Linux 中 du 命令的不同功能,它为程序员提供了不同的方法来了解目录及其子目录的大小。 Bash 是本文代码示例所使用的 shell。
文章内容
du 无选项或参数
其他目录的大小
表观尺寸
sudo 命令
按大小排除条目
排除=模式
结论
du 无选项或参数
当前工作目录是用户当前正在工作的目录。提示符通常显示当前工作目录。输入 du 而不带任何选项和参数,如下所示:
然后按回车键将显示当前工作目录下所有子目录的磁盘使用情况。它将显示当前工作目录的子树的此信息。显示屏上的点代表当前工作目录。
子树的每条路径在显示屏上都以一条线表示。每行以目录的大小(即路径中的姓氏)开头。显示内容可能类似于:
12 ./dir1/dir2/dir3
16 ./dir1/dir2
20 ./dir1
请注意,不清楚大小是以字节、千字节、兆字节还是千兆字节为单位。符号的千字节数,K表示1024字节;兆字节符号,M表示1,048,576字节; GB 符号,G 表示 1,073,741,824 字节。对于要指示的倍数,应使用 -h 选项(开关),如下所示:
显示结果将如下所示:
12K ./dir1/dir2/dir3
16K ./dir1/dir2
20K ./dir1
当使用 -h 选项时,大小被认为是可读的形式。
注意:使用 –all 选项,du 命令还将给出文件的磁盘使用情况;但是,本文不会讨论文件的磁盘使用情况。
其他目录的大小
Linux 卷的典型绝对路径如下:
第一个/是根目录。该目录具有直接子目录,包括主目录。主目录包含用户的目录。如果用户的名字是 John,那么他可以将用户的目录命名为 john。用户的目录由~标识。因此,用户可以使用命令“cd ~”从任何目录到达他的目录。 dirOne 是用户创建的目录。用户还可以在此级别创建其他目录。 dirTwo、dirThree 和 dirFour 是其先前目录的子目录,由用户创建。
用户可以从任何目录中知道任何其他目录及其子目录(子树)的大小,绕过绝对路径作为参数。例如,如果需要磁盘使用,
那么命令将是:
或者
其中 ~ 代表用户的目录。
要使用相对路径,用户必须已位于相应的父目录中。例如,如果显示提示,
意味着用户位于目录 /home/john/dirOne,那么以下命令将给出与上述命令相同的结果:
路径仍然是相对的。要显示当前目录的相同信息,请不使用任何参数,或使用点。
此方案可用于仅获取一个目录的大小,即路径中的最后一个目录(前面是路径)。可以获取路径中间目录的大小 - 请参阅下面的“exclude=PATTERN”。
总计
可以生成所有涉及的目录的总大小。对于上述情况,命令为:
表观尺寸
表观大小通常小于磁盘使用量。然而,在某些情况下,表观大小大于磁盘使用量;原因——见下文。获取上述相对路径的表观大小的命令是:
最大深度
当–max-depth=0时,du仅打印当前工作目录的大小; du –max-depth=1 时,du 打印当前工作目录的大小及其所有一级子目录的大小;当–max-depth=2时,du打印当前工作目录的大小及其所有第一级子目录和所有第二级子目录的大小;当–max-depth=3时,du打印当前工作目录及其所有一级子目录、所有二级子目录和所有三级子目录的大小;随着最大深度值的增加,这种情况会继续下去。它的使用示例是:
sudo 命令
根目录中具有自己的子目录的目录之一是 var。如果用户输入
然后按 Enter,他会发现某些目录的权限被拒绝。也就是说,他无法知道某些目录的大小。该权限被拒绝,因为该用户不是超级用户。超级用户有权查看这些目录的大小(磁盘使用情况)。因此,为了让用户获得该权限,他必须使用 sudo 命令,如下所示:
如果 shell 要求用户输入密码,则用户必须输入密码并按 Enter 键。通过sudo命令,普通用户(程序员)可以看到var目录及类似目录中所有目录的大小。
按大小排除条目
“–threshold=SIZE”选项不允许列出大小小于 SIZE 的目录。对于路径来说,
提示符为“john@host:~$,”,然后
其中 12K 表示 12 KB,不会显示磁盘使用量小于 12K 的任何目录的行。
–排除=模式
此选项和值可以省略用户不希望出现在列表中的目录行。
省略最后一个目录的行,即路径的 dirFour
命令应该是:
结果会是这样的,
8.0K dirOne/dirTwo
12K dirOne
注意:大小不包括路径最后一级目录(dirFour)的大小。
要仅具有上层深度目录及其子树的大小,请不要在选项中包含下层深度目录。所以通过命令,
the output will be something like,
4.0K dirOne/dirTwo
8K dirOne
注意:大小已排除树的较低层目录的大小。
再考虑一下,绝对链接,
以下命令将仅获取 dirTwo 目录的磁盘使用情况,该目录是路径中的目录。命令是:
该参数包含所有前面的目录直到所讨论的目录。排除的值包含所有前面的目录,以 * 结尾,就在相关目录之后。 * 表示该级别的所有子目录(及其子树)。结果会是这样的,
结论
尝试使用“ls -s”命令了解目录的大小是一种误导。有了它,仅获得目录的元数据。要了解目录的磁盘使用情况,应使用 du 命令。与 -h 选项一起使用时,目录的大小是可读的。表观尺寸可以使用表观尺寸选项获得。 du 命令不带任何选项和参数,仅显示当前目录的所有子目录的大小,包括当前目录的大小。 “du”的参数是路径,可以从根开始。选项和它们的一些值准确地决定了要寻址的目录。 sudo命令默认赋予普通用户超级用户权限。