长期以来对linux下的软硬连接老是搞不清楚,今天上网找了些资料来解决一下自己的这个遗惑。
Linux的文件系统为每一个文件分配了一个我们称为索引节点(Inode)的数据结构,在这个索引节点内有一个全系统独一无二的索引节点号将文件名与索引节点分开。所谓硬链接(hard link, 也称链接[1])就是一个文件的一个或多个文件名。再说明白点,所谓链接无非是把我们人类使用的文件名和文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。“链接文件与被链接文件是无法区别的”,因为它们都指向同一个索引节点嘛。
硬链接的两个限制:
1、不允许给目录创建硬链接;
2、只有在同一文件系统中的文件之间才能创建链接。
那么操作系统为什么要进行限制不能给目录创建硬连接呢?
如果引入了对目录的硬连接就有可能在目录中引入循环,那么在目录遍历的时候系统就会陷入无限循环当中。也许您会说,符号连接不也可以引入循环吗,那么为什么不限制目录的符号连接呢?原因就在于在linux系统中,每个文件(目录也是文件)都对应着一个inode结构,其中inode数据结构中包含了文件类型(目录,普通文件,符号连接文件等等)的信息,也就是说操作系统在遍历目录时可以判断出符号连接,既然可以判断出符号连接当然就可以采取一些措施来防范进入过大的循环了,系统在连续遇到8个符号连接后就停止遍历,这就是为什么对目录符号连接不会进入死循环的原因了。但是对于硬连接,由于操作系统中采用的数据结构和算法限制,目前是不能防范这种死循环的。”
参考文章:http://roclinux.cn/?p=752
http://linux.chinaunix.net/bbs/archiver/?tid-1029421.html