为何ls命令显示部分目录大小不为4K?
为何ls命令显示部分目录大小不为4K?
嘿,这个问题问得很接地气,我来给你唠明白其中的门道~
首先得搞懂一个核心点:Linux/Unix里的目录本质是一种特殊文件,它存的不是文件内容,而是一堆「目录条目」——每个条目记录着文件名对应的inode编号,还有一些小元数据。
咱们平时看到的4.0K,其实是多数文件系统(比如ext3/ext4)的默认数据块大小。当目录里的条目足够多,需要占用至少一个完整数据块时,ls -l就会显示这个块的大小4.0K。
那像你例子里的room_old显示138字节是咋回事?这得益于现代文件系统的inline目录特性:当目录的内容特别少(总大小远小于一个4K块),系统会直接把这些目录条目塞进目录自身的inode预留空间里,不用单独分配数据块。这时候ls -l显示的就是目录内容的实际字节数,而不是块大小。
你想啊,room_old里估计也就一两个文件,对应的目录条目加起来才138字节,完全装得进inode的预留空间,自然就不用占4K的块了。
要是你想验证的话,可以敲个ls -s命令看看块数:room_old的块数大概率是0或者1(不同系统显示略有差异),而那些显示4.0K的目录,块数会是1(对应一个4K块)。
备注:内容来源于stack exchange,提问作者randall
相关产品推荐
相关产品推荐

