一、inode:index node (索引节点)


    1.Linux文件系统使用索引节点(inode)来记录文件信息,作用类似于Windows下的文件分配表。表中包含文件系统所有文件列表。

    一个节点(索引节点)是一个表项,包含有关文件的信息(元数据)包括:

         1.文件类型权限,UID,GID

         2.链接数(指向这个文件名路径名称的个数)

         3.该文件的大小和不同的时间戳

         4.指向磁盘上文件的数据块指针

         5.有关文件的其他数据

    也就是说,Linux系统中每个文件都有一个与众不同的标记,都有一个编号。


 2.显示文件系统的索引节点方法:

     ls -i , ll -i (如下图)

Linux系统中的索引节点、硬链接和软链接_第1张图片 

 3.在一个分区中inode节点编号是唯一的,如果相同则代表是同一个文件; 不在一个分区中,inode节点编号可能是相同的,但相同并不代表是同一个文件。每个分区中都有自己的一套编号,也就是inode表(inode table)

Linux系统中的索引节点、硬链接和软链接_第2张图片


 4.每个文件在创建的时候,系统都会自动的给分配一个节点编号。但并不是可以无限索取的。可以通过 df -i 来查看大小 (df 显示块即容量大小)。所以有时候系统显示磁盘已满,但查看空间还有,就有可能是inode耗尽导致的。

Linux系统中的索引节点、硬链接和软链接_第3张图片

    5.inode table表

   元数据,放在inode表中,数据放在数据块中(block)

   每个分区都有一个独立的inode表,文件在inode表中对应自己的元数据表,存放的是文件的元数据(大小、权限、时间戳...)和指针,都在节点条目(inode entrv)中显示。

    6.目录

       文件引用一个inode号,

       一个目录是目录下的文件名和inode号之间的映射

Linux系统中的索引节点、硬链接和软链接_第4张图片


    7.cp和inode

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

      

    8.rm和inode

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

      把数据块放在空闲列表中

      删除目录项

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

      

    9.mv和inode

       (1)如果mv命令的目标和源在相同的文件系统

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

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

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

       (2)如果目标和源在一个不同的目标中,mv相当于cp和rm


二、硬链接


    1.创建硬链接ln filename [linkname]

Linux系统中的索引节点、硬链接和软链接_第5张图片

  2.然后查看下文件 aa 和 bb 是否相同

wKiom1ecfLiDj-PsAAAZ5V80KTg626.png

Linux系统中的索引节点、硬链接和软链接_第6张图片

   通过实验得出结论:

     1.创建硬链接会增加额外的记录项以引用文件.(多增加一条访问渠道)

     2.硬链接是对应与同一个文件上的物理文件(就是说,一个文件多个名,对应的内容都是相同的。)

     3.每个目录引用相同的indoe号

     4.创建时硬链接数递增

     5.删除文件时:

           rm 命令递减计数的链接

           文件要存在至少有一个链接数

           当链接数为零时,该文件被删除。

      6.不能跨越驱动器和分区(硬链接本质是一个文件多个名,在一个分区的不同文件可以,跨分区就不是一个文件了)

     7.不允许对目录创建硬链接。这里注意,目录至少有两个硬链接,有隐藏的目录 “.”而且每创建一个子目录就会都一个硬链接数,因为子目录有“..” 


三、软链接(符号链接)

    1.创建软链接:ln -s filename [linkname]

Linux系统中的索引节点、硬链接和软链接_第7张图片

    2.在同一个分区下创建文件f1的软链接文件f2,通过观察二者的节点编号和元数据、时间戳都不同,所以软链接和原文件不是同一个文件。

Linux系统中的索引节点、硬链接和软链接_第8张图片

  3.在不同分区下创建软链接,情况如下(一定要注意绝对路径和相对路径)

Linux系统中的索引节点、硬链接和软链接_第9张图片

Linux系统中的索引节点、硬链接和软链接_第10张图片

   注意:

 软连接本质上不是一个文件(节点编号不一样),是指向到了f1.可以通过f11,f111访问f1 中的内容。

 原文件f1一定要写绝对路径,或相对路径相对于软连接文件路径,而不是相对于当前工作目录

4.可以对目录创建软链接

Linux系统中的索引节点、硬链接和软链接_第11张图片

结论:

   1.软链接(符号)是一个文件指向另一个文件;

   2.ls -l 显示连接的名称和引用文件

   3.软链接(符号)的内容是它指向文件的内容

   4.可以对目录进行软链接

   5.可以跨分区对文件或目录进行软链接

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