关于文件系统在创建目录文件和普通文件时的区别

在上一篇探究linux解释器时同样涉及到了一些其他问题

比如为什么在ls -lh时目录的大小都是4.0k?

 之前想过可能是最小或者最大只能显示出4.0k的,但是就如上图显示的,这两种都是不可能的

直到我在使用stat命令查看文件大小时忽然想到,用这个命令能不能查看文件夹的大小?

然后发现还真能,但是也是4.0k

 于是我开始想,难不成这个文件夹真的就是4.0k这么大?但是这是为什么?

后来发现自己还是windows用多了,下意识就以为文件夹的大小就应该是整个文件夹中所有文件的大小加和

而实际上呢,这个目录本身也是一个文件,而我们这些查看文件大小的命令查看的就是这个目录本身的文件大小,而不是目录下包含的文件大小总和

那为什么所有目录文件的大小都是4k呢

通过这两篇文章:

https://cloud.tencent.com/developer/ask/sof/211345

https://www.cnblogs.com/iiiiher/p/8511351.html

我们可以得知在创建文件时,系统会给这个文件分配一个叫inode(索引节点)的东西,这个inode会指向一个block,这个block就是实际存文件的地方

这个block我觉得挺好理解的吧

参考这个:https://blog.csdn.net/jialexiao/article/details/71124930

大概就是数据的存放是一块一块的,而这个块的大小我们这里默认是4096也就是4k,在创建文件时自动会给inode指向一个block,而目录文件又不会再写入什么的(还真不太一定哈,稍后研究研究),所以我们就会看到目录文件都是统一的4k大小

但是如果是这样的话那不就和一开始的猜想之一一样了吗,即“最小的文件大小就是4k”,而我们能够很明显地看到小于4k的文件大小是可以正常显示的

 那么这里的区别还是回到了普通文件和目录文件的区别在哪

本来找了半天没找到,结果最后发现自己找错方向了

参考这篇文章:https://blog.csdn.net/dangpu/article/details/40020801

在创建空文件时是不会分配block的,只会分配一个inode,而创建文件夹时会同时分配block和inode

上面提到的文章还讲了关于这个block还有一个东西就是在使用ls -l时,上面显示的这个total是什么东西

还看到有人说block是4K,total是block的个数,所以total可以是0,1,2,3...等正整数的,这个其实非常好验证,我试了一下

 可以看到ls -lh时显示文件的大小只有2,但是total却是4.0K

这里还发现件事,就是这个total是根据你当前实际显示出的文件来计算的,比如如果加上了-a,那么这个total就会增加

看起来似乎是把这两个目录.和..也计算上了

参考:

https://www.cnblogs.com/xumenger/p/4491425.html

https://zhuanlan.zhihu.com/p/73437944

https://blog.csdn.net/qq_42759112/article/details/126249990

https://blog.csdn.net/jialexiao/article/details/71124930

posted @ 2024-04-24 18:04  TheBlackEagle  阅读(13)  评论(0编辑  收藏  举报