Linux基础篇之目录与文件

对于磁盘而言,最小单位是sector,多个sector组成了一个block, block译作中文"块",

一般情况下:

1 sector = 512 bytes = 0.5 K

8 sector = 4K = 1block

inode = 128  or 256 bytes

 

块里面存放了文件数据,但是文件的元数据也需要记录,记录元数据的块叫inode

inode有以下数据:

  • 文件的字节数。
  • 文件拥有者的User ID。
  • 文件的Group ID。
  • 文件的读、写、执行权限。
  • 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  • 链接数,即有多少文件名指向这个inode。
  • 文件数据block的位置。

除了文件名以外的所有文件信息,都存在inode之中,那么文件名放在哪里呢?

在<unxi高级系统编程>一书中, 对此有详细的解释

 

 

Linux基础篇之目录与文件

 

 

图片1解释:1个磁盘分成了很多分区,每个分区可以做不同的文件系统,文件系统内部又分了i节点和数据块等。

这张图解释了为什么硬链接不能跨区,因为硬链接依赖于文件系统而存在, 而文件系统依赖于分区而存在。

 

 

 

Linux基础篇之目录与文件

 

图片2解释:数据块由文件块和目录块组成,只有两项重要数据存放在目录块中:文件名和i节点编号,同时i节点编号又指向了i节点,i节点再指向文件块。

这张图解释了为什么取消硬链接不会释放磁盘空间,因为只是删除了指向i节点的指针。

也解释了给文件重命名时,文件的存储位置并不会发生变化,只是新构建了指向已有i节点的新目录块,并删除了旧的目录块。

Linux基础篇之目录与文件

 

图片3解释:在目录中新建目录testdir后的变化,对于testdir的父目录来说,有3个链接指向不同的inode,对于testdir来说,有2个链接指向不同的inode,二者指向的inode有重叠部分。

图片3解释了对于一个目录来说,至少有2个链接,分别是点和点点。如果目录下面还有子目录, 链接数会增加.

 

 上述三个图可以说明的是:

  无论是目录还是文件,最终都会落到数据块中.

  dentry用来记录文件的名字、索引节点指针以及与其他目录项的关联关系。多个关联的目录项,就构成了文件系统的目录结构, 是由内核维护的一个内存数据结构,不同于数据块中的目录块, 但是有关系。

  

 

上一篇:【DB笔试面试358】在MySQL中如何有效的删除一个大表?


下一篇:Linux系统中inode和block详解