1. INODE索引节点

      在Linux中,一切皆文件,都是以文件形式进行存储。

      对于文件,它有两个属性,一个是自身属性,又称文件的元数据,表明这个文件自身的属性情况,如 文件的创建者是谁,所属组是哪个,文件的权限是什么,创建的时间,修改的时间...可以通过stat命令进行文件自身属性的查询,具体用法stat file;file是你要查询的文件。

      另一个属性是写入文件中的内容,又称它的数据属性,该属性可以通过cat,vim等命令进行数据 查看或者修改。文件的主要作用就是用来存储数据的,但是如果缺少文件的自身属性这些信息,那么文件的查看,修改,移动等操作就会变得极其复杂,同样也会加重系统资源的消耗,所以文件的元数据也是极其重要的。

      Linux中存放着大量的文件,为了方便对文件进行查询等操作,创建文件节点号inode是非常有必 要的。inode节点号就相当于文件的"门牌号",当要进行文件读写等操作时,就需要先获取该文件 的"门牌号",然后就可以根据这个"门牌号"直接找到文件所在位置,这些复杂的寻址操作都发生在系统内部,不需要人为进行参与。

INODE索引节点与软硬链接的理解_inode

  如上图所示,通过stat命令就可以查看该文件的元数据信息。

  INODE索引节点与软硬链接的理解_链接_02

   从上图,我们可以对inode表结构有个更清晰的了解,表结构中存储了文件自身属性相关信息,以 及指向数据块的指针,通过查看文件系统可以了解到每个数据块具体的大小,就能够知道,一个索引节点能够存储多大的信息,如果直接块指针就能将文件中的所有数据"安排"到指定的数据块中,那么就不需要动用到间接块指针,如果文件过大,直接块指针使用完了,但是还有数据没有存储到数据块中,那么间接块指针就会启用,它指向的不是具体的数据块,而是指向下一个文件块的指针,再由下一个文件块的指针指向数据块,这样该索引节点的存储能力就比它实际存储能力扩大了一倍,三重指针也是这个原理。

   一个目录就是目录下的文件名和文件inode号的映射。

   一般inode表会占用文件系统磁盘空间的1%。

 cp与inode 

   分配一个空闲的inode号,在inode表中生成新的条目,在目录中创建一个目录项,将名称与inode号关联,拷贝数据生成新文件。

 rm与inode 

    链接数递减,从而释放的inode号可以被重用

    把数据块仿佛空闲列表中

    删除目录项

    数据实际上不会马上被删除,但当另一个数据使用这个数据块时将被覆盖   

 mv与inode

    用新的文件名创建对应新的目录项

    删除旧目录条目对应的就得文件名

    不影响inode表(除时间戳)或磁盘上的位置,没有数据被移动

    如果目标和源不在一个文件系统上,那么mv相当于cp+rm 


2.软硬链接

  2.1 硬链接

   INODE索引节点与软硬链接的理解_inode_03

    创建硬链接会增加额外的记录项以引用文件

    对应于同一文件系统上一个物理文件

    每个目录引用相同的inode号

    创建时链接数递增

    删除文件时:

      rm命令递减计数的链接

     文件要存在,至少有一个链接,当链接数为0时,该文件被删除,没有指针指向该文件所在的数据块,无法被读取。

     不能跨越驱动器或者分区

    ln filename [linkname]font

   INODE索引节点与软硬链接的理解_链接_04

  2.2 软链接

    一个符号链接指向另一个文件

    ls -l 显示链接的名称和引用的文件

    一个软链接的内容是它引用文件的名称

    可以对目录进行

    可以跨分区

    指向的是另一个文件的路径,其大小为指向路径的字符串长度,不增加或减少目标文件inode引用计数

    ln -s filename [linkname] 

   INODE索引节点与软硬链接的理解_软硬_05