当您使用linuxdu命令时,您将获得实际磁盘使用情况以及文件或目录的真实大小。我们将解释为什么这些值不一样。
文件的大小和它在硬盘上占用的空间很少相同。磁盘空间按块分配。如果一个文件比一个块小,整个块仍然分配给它,因为文件系统没有更小的不动产单元可供使用。
除非文件的大小是块的精确倍数,否则它在硬盘上使用的空间必须始终向上舍入到下一个整块。例如,如果一个文件大于两个块但小于三个块,则仍需要三个块的空间来存储它。
与文件大小相关的两个测量值。第一个是文件的实际大小,即组成文件的内容字节数。第二个是硬盘上文件的有效大小。这是存储该文件所需的文件系统块数。
让我们看一个简单的例子。我们将一个字符重定向到一个文件中,以创建一个小文件:
echo "1" > geek.txt现在,我们将使用长格式列表ls来查看文件长度:
ls -l geek.txt长度是dave条目后面的数字值,即两个字节。为什么我们只向文件发送了一个字符却只有两个字节?让我们看看文件里发生了什么。
我们将使用hextump命令,它将给我们一个精确的字节计数,并允许我们“看到”非打印字符作为十六进制值。我们还将使用-C(canonical)选项强制输出在输出主体中显示十六进制值,以及它们的字母数字字符等价物:
hexdump -C geek.txt输出告诉我们,从文件中的偏移量00000000开始,有一个字节包含一个十六进制值31,还有一个字节包含一个十六进制值0A。输出的右侧部分尽可能将这些值描述为字母数字字符。
十六进制值31用来表示数字1。0A的十六进制值用于表示换行符,它不能显示为字母数字字符,因此它显示为句点(.)。换行字符由echo添加。默认情况下,echo在显示需要写入终端窗口的文本后,会启动一个新行。
这与ls的输出一致,并且与两个字节的文件长度一致。
相关:如何使用ls命令列出Linux上的文件和目录
现在,我们将使用du命令查看文件大小:
du geek.txt上面说是四号,但是四号是什么?
当du以块的形式报告文件大小时,它使用的大小取决于几个因素。可以在命令行上指定应使用的块大小。如果不强制du使用特定的块大小,它将遵循一组规则来决定使用哪个块大小。
首先,它检查以下环境变量:
如果其中任何一个存在,则设置块大小,并且du停止检查。如果未设置,则du默认为1024字节的块大小。除非设置了名为POSIXLY\u CORRECT的环境变量。如果是这样,du默认为512字节的块大小。
那么,我们如何找出哪个在用呢?您可以检查每个环境变量来计算它,但是有一种更快的方法。让我们将结果与文件系统使用的块大小进行比较。
为了发现文件系统使用的块大小,我们将使用tune2fs程序。然后我们将使用-l(list superblock)选项,通过grep管道输出,然后打印包含单词“Block”的行
在本例中,我们将查看第一个硬盘驱动器sda1的第一个分区上的文件系统,我们需要使用sudo:
sudo tune2fs -l /dev/sda1 | grep Block文件系统块大小为4096字节。如果我们将其除以du(4)得到的结果,就会显示du的默认块大小是1024字节。我们现在知道了一些重要的事情。
首先,我们知道用于存储文件的最小文件系统空间是4096字节。这意味着即使是我们微小的两字节文件也占用了4KB的硬盘空间。
要记住的第二件事是专门用于报告硬盘和文件系统统计信息的应用程序,例如du、ls和tune2fs,对于“块”的含义可能有不同的概念。tune2fs应用程序报告真实的文件系统块大小,而ls和du可以配置或强制使用其他块大小。这些块大小并不打算与文件系统块大小相关;它们只是那些命令在输出中使用的“块”。
最后,除了使用不同的块大小,du和tune2fs的答案传达了相同的含义。tune2fs结果是一个4096字节的块,du结果是四个1024字节的块。
如果没有命令行参数或选项,du会列出当前目录和所有子目录正在使用的总磁盘空间。
我们来看一个例子:
du该大小以默认块大小(每个块1024字节)报告。遍历整个子目录树。
如果希望du报告的目录与当前目录不同,可以在命令行上传递该目录的路径:
du ~/.cach/evolution/如果您想报告某个特定文件,请在命令行上传递该文件的路径。您还可以将shell模式传递给用户,然后选择一组文件,例如*.txt:
du ~/.bash_aliases要让du报告当前目录和子目录中的文件,请使用-a(所有文件)选项:
du -a对于每个目录,报告每个文件的大小以及每个目录的总数。
您可以告诉du列出目录树到一定的深度。为此,请使用-d(max depth)选项并提供深度值作为参数。请注意,所有子目录都被扫描并用于计算报告的总数,但它们并没有全部列出。要将最大目录深度设置为一级,请使用以下命令:
du -d 1输出列出当前目录中该子目录的总大小,并提供每个子目录的总大小。
要更深一层列出目录,请使用以下命令:
du -d 2可以使用“块”选项为当前操作的du设置块大小。要使用一个字节的块大小,请使用以下命令获取目录和文件的确切大小:
du --block=1如果要使用1兆字节的块大小,可以使用-m(兆字节)选项,该选项与--block=1M相同:
du -m如果要根据目录和文件使用的磁盘空间以最合适的块大小报告大小,请使用-h(人类可读)选项:
du -h要查看文件的外观大小而不是用于存储文件的硬盘空间量,请使用--appearance size选项:
du --apparent-size您可以将此选项与-a(all)选项结合使用,以查看每个文件的外观大小:
du --apparent-size -a将列出每个文件及其外观大小。
如果希望du只报告目录的总数,请使用-s(summary)选项。您还可以将此选项与其他选项相结合,例如-h(人类可读)选项:
du -h -s在这里,我们将它与--appearance size选项一起使用:
du --apparent-size -s要查看创建或上次修改的时间和日期,请使用--time选项:
du --time -d 2如果您看到du的奇怪结果,特别是当您将大小交叉引用到其他命令的输出时,通常是由于可以设置不同命令或默认命令的块大小不同。这也可能是由于实际文件大小和存储它们所需的磁盘空间之间的差异。
如果需要匹配其他命令的输出,请在du中尝试--block选项。
... 要了解更多的Linux基础知识,请查看我们关于如何在Linux中重命名文件的概述。 ...
... 在您真正充分利用终端之前,您需要知道如何导航它。这就是为什么我们认为这些是最基本的Linux命令:如果你不能更改目录或者在一个你不记得如何使用的命令上获得帮助,那么再多的终端知识也帮不了你。 ...
如果您不知道如何使用ls命令,那么获取与存储上的文件相关的详细信息是很困难的。在这里,我们将讨论Linux上与ls命令相关的所有内容,以及它使用的一些不同的标志。 ...
... 下面介绍如何使用Linux convert工具,它允许您通过命令行对终端执行所有这些操作,以及更多操作。 ...
Linux中有几种不同的应用程序和命令可以为您创建新文件,即使不启动应用程序。使用哪种方法取决于文件的用途。让我们看看这些选项,这样您就可以知道哪一个对您最有用。 ...
...载和卸载加密的文件系统,并进一步简化过程。 相关:如何在Linux上创建别名和Shell函数
...覆盖默认值,但在许多情况下,它们对您有利。 相关:如何使用所有Linux的搜索命令 安装fd 由于ubuntu19.04(Disco Dingo,),您可以通过使用apt get调用官方维护的包来直接安装fd。如果您运行的是较旧版本的Ubuntu,请查看Git hub页面...
...上是指向现有文件或目录的快捷方式。让我们看看他们是如何管理的,以及如何使用这三个元素来实现这一点。 假设我们有一个包含两个文件的目录:一个是脚本,另一个是应用程序,如下所示。 我们可以使用ln命令和-s(符...
...,而且您不必记住一组晦涩难懂的命令行选项。 相关:如何使用ls命令列出Linux上的文件和目录 快速比较 让我们使用ls给出一个长列表(-l选项),其中包含人类可读的文件大小(-h选项): ls -lh ana.h 从左到右,ls提供的信息是...