现在的位置: 首页 > 综合 > 正文

索引节点(inode)、硬连接(hard link)与符号连接(symbolic link)

2013年07月09日 ⁄ 综合 ⁄ 共 1922字 ⁄ 字号 评论关闭

索引节点inode:Linux为每个文件分配一个称为索引节点的编号,可以将inode简单理解成一个指针,它永远指向本文件在物理磁盘上的具体存储位置。系统是通过索引节点(而不是文件名)来定位每一个文件的。

 

硬连接:1个inode编号肯定和一个文件的数据存储区一一对应。那么一个文件系统中两个或更多个不同的文件名能否对应同一个文件呢?答案是肯定的。我们知道inode编号是记录在文件名对应的目录项中的,我们可以使两个或多个文件的目录项具有相同的inode值,实际上就是使它们对应着同一个数据存储区。有几个目录项具有相同的inode号,我们就说这个文件有几个硬连接(hardlink),对于普通文件,ls -l命令的连接计数count域的数值就是本文件拥有的硬连接数。硬连接可以通过ln命令建立。建立硬连接实际上只是增加了一个目录项,但并未复制文件数据区,原文件的数据区由两个文件共享。这样一方面能够节约大量磁盘空间,同时可以保证两个文件能同步更新。

# ln /home/zyd/mytext hardlink_mytext
ls -il’可以显示文件的inode(在下面最左边):
262457 -rw-rw-r– 2 zyd zyd 17 Nov 3 14:50 hardlink_mytext
262457 -rw-rw-r– 2 zyd zyd 17 Nov 3 14:50 mytext

连接计数count:连接连接计数域表示有几个文件共享同一数据存储区,即几个硬连接(hardlink_mytext和mytext互为硬连接)。如上面的例子中hardlink_mytext和mytext文件的count值都是2。当删除硬连接文件是系统先计算count-1的值,如果大于1则仅删除目录项并修改硬连接数;如果为1则删除目录项,另一文件变为普通文件,修改硬连接数;如果为0则直接删除文件。我们可以通过建立硬连接来保护重要的文件,避免被误删除。

符号连接: 也称 软连接(soft link),指文件的路径指向,非常像windows下的快捷方式。

符号连接和硬连接的区别:

符号连接是文件的路径指向,它甚至不需要原文件的存在(这称之为断链);硬连接指向同一数据区,此数据区必须存在。另外不允许为目录建立硬连接,硬连接也不能跨文件系统。

 

//========================================================================

 

Linux 正统的文件系统 (ext2ext3) 一个文件由目录项、 inode 和数据块组成。

目录项 : 包括文件名和 inode 节点号。

Inode :又称文件索引节点,是文件基本信息的存放地和数据块指针存放地。

数据块 :文件的具体内容存放地。

 

Linux 正统的文件系统 ( ext2 3 ) 将硬盘分区时会划分出目录块、 inode Table 区块和 data block 数据区域。 一个文件由一个目录项、 inode 和数据区域块组成。 Inode 包含文件的属性 ( 如读写属性、 owner 等,以及指向数据块的指针 ) ,数据区域块则是文件内容。 当查看某个文件时,会先从 inode table 中查出文件属性及数据存放点,再从数据块中读取数据。

 

站在 2w 英尺视图,文件存储结构大概如下:  

 

其中目录项的结构如下 ( 每个文件的目录项存储在改文件所属目录的文件内容里 )



 图4:目录项结构
 

 

其中文件的 inode 结构如下( inode 里所包含的文件信息可以通过 stat filename 查看得到):

 

 

图5:inode结构

 

以上只反映大体的结构, linux 文件系统本身在不断发展。但是以上概念基本是不变的。且如 ext2 ext3 ext4 文件系统也存在很大差别,如果要了解可以查看专门的文件系统介绍。

5. 软连接、硬链接

软链接和硬链接是我们常见的两种概念:

硬连接 :是给文件一个副本,同时建立两者之间的连接关系。修改其中一个,与其连接的文件同时被修改。如果删除其中 [color=red] 任意一个 [/color] 其余的文件将不受影响。

软连接 : 也叫符号连接 , 他只是对源文件在新的位置建立一个“快捷(借用一下 wondows 常用词)”,所以,当源文件删除时,符号连接的文件将成为无源之水 -> 仅仅剩下个文件名了,当然删除这个连接,也不会影响到源文件,但对连接文件的使用、引用都是直接调用源文件的。

具体关系可以看下图:

 

 

图5:软链接和硬链接

 

 

 

从图上可以看出硬链接和软链接的区别:

1 :硬链接原文件和新文件的 inode 编号一致。而软链接不一样。

2 :对原文件删除,会导致软链接不可用,而硬链接不受影响。

3 :对原文件的文件内容修改,软、硬链接文件内容也一样的修改,因为都是指向同一个文件内容的。

 

抱歉!评论已关闭.