Linux "ls -al"查看 所有目录的文件容量都是4096Bytes是怎么回事?

Linux "ls -al"查看 所有目录的文件容量都是4096Bytes是怎么回事?,第1张

在Linux下一切皆文件,因此目录也是文件。所以,通过 ls -al 命令显示的目录大小并非常规意义上包含其子文件的总大小,而是单纯指的是目录的大小。这一点和Windows并不一样。

请注意一点,其实Linux下目录的大小并不都是4096的。

那么为什么大部分的目录大小都是4096呢?这需要从Linux文件的存储机制说明。

文件储存在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。

*** 作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为“索引节点”。

每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

而Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

所以ls -al命令实际显示的就是目录文件的大小。又因为OS定义的文件最小存取单位“块”(block)是4KB,所以目录一般显示为4096B。

如果你需要看目录的总大小可以用 du 命令,楼上说的很详细了。

PS:OS系统块的大小是可以修改的。

1、固态硬盘

2、Fat32:拷贝大量小文件(如拷贝照片、文档转移等)速度很快,但不支持存储单个大于4GB的文件。

3、Linux系统

4、tar压缩成大的一个文件

5、分多台电脑储存

你所说的东西没听说过。感觉你似乎语无伦次了……

不过所有文件系统的硬盘数据存储,都是基于块来分配的,最少一个块,只能按块分配,一个块零1字节的文件,也需要2个块。

而且所有文件,不管是不是目录,都会分配块。我记得目录的块另有用途,好像是用来存放他的子目录和文件相关信息用的。

不过我记得有几个文件系统有个例外,他的文件分配表存储量比较大,如果很小的文件,可以直接存放在文件分配表里面,好像 NTFS 就有这个功能。

不过文件分配表依然也是按照块进行存储的。硬件限制如此,没办法的事情。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7104407.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-01
下一篇 2023-04-01

发表评论

登录后才能评论

评论列表(0条)

保存