5
26
2014
0

硬链接&软链接

硬链接是一个指针,指向文件的索引结点。不为其分配新的inode。

软连接要分配新的inode,完成dentry->inode->block的分配(dentry中的name就是创建软连接文件的文件名)。block指向另一个dentry文件。

 

先看硬链接、软连接的构造方法。

删除一个文件或者目录。实际上是把inode的链接数减1,链接数是统计的硬链接,不影响其他指向此inode的链接。而会对指向该文件和目录的软链接有影响。

所以说硬链接是直接指向文件的inode,而软连接是指向目录的。

在截图中我们可以看出,ls -F 指令,软连接用@标识

上图中第一列是inode号,第三列是硬链接数,可以看到a.txt和b.txt是共享一个inode号的,且文件属性相同。由于共享了inode号,故不同的文件系统中是不能建立硬链接的。

而软链接c.txt与a.txt,b.txt的inode号以及文件属性都不同。即软连接有自己的inode号。

此时a.txt和b.txt的硬链接数都是2

以下两点软硬链接用法区别

1.硬链接不许对目录创建,而软链接而对目录创建

原因,有两点:

1.防止遍历时出现死循环。软连接之所以不会出现死循环是因为系统可以在遍历目录时,可以判断出这是一个符号链接,若连续出现符号链接超过某个此处,则终端循环。

2.dentry(目录和文件都有自己的dentry)中有一个指向父目录的指针。若父目录中有两个dentry地址,则该目录项中的每个dentry的parent向不知道指向哪个了。

 

2.硬链接不能跨文件系统,软链接可以跨文件系统

 

硬链接实现的是多个文件名指向同一个inode,即多个dentry对应一个inode。也就是每个硬链接对应一个目录项

这部分没有完全描述清楚,之后又了解再及时补充

 

下面插入一幅图:

 

通过上图我们可以上到软连接的数据区实际上指向的是源文件的dentry,所以说:

对于软连接:创建一个软链接,inode的引用计数不会增加,删除被链接的源文件,则相关软连接变成了死链接。

对于硬链接:创建硬链接,inode的引用计数会加1.

这部分有参考:

http://www.cnblogs.com/stli/archive/2010/11/10/1873212.html

http://blog.csdn.net/kension/article/details/3796603

Category: 文件系统 | Tags: | Read Count: 1307

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com