10 十二月 2008

Linux中的硬连结和符号连结(个人理解)

在Linux中创建文档或者目录的快捷方式有两种(类似Windows中的快捷方式),硬连结和符号连结。两者的区别如下:
1、硬连结,用来创建文档的快捷方式。实际上是在文档所在目录的block区域添加了文档的关联数据inode。因此当创建一个硬连结指向一个文档时,这个硬连结实际上表示指向了一个文档的inode。因此对该连结进行访问,实际上是通过存储的inode信息来找到文档的数据域。所以如果删除该链接,删除的只是上层目录存储的文档inode信息,并不会影响原文档在原目录下的关系。如果删除原档案,实际上删除的是该文档上层目录从存储的关联数据inode,而原文档仍然可以通过其他关联的目录读取出来(即通过硬连结读取)。该方式不能跨分区创建连结。
2、符号连结,可以用来创建文档和目录的快捷方式。它与硬连结的不同在于,它实际起一个指向的作用指向档案是实际的位置,因此给一个文档做多少个符号链接,如果删除原文档,那么该文档的关联数据就会被删除 ,因此其它的符号链接是无法再次读取数据的。该方式可以跨分区创建连结。
这是通过相关资料得出的结果。一般来说很多人对于硬连结和符号链接都搞的不太清楚,主要是Linux的一些基本概念没有清楚的原因。所以如果要理解这上面的概念,首先必须理解Linux系统中的inode和block的概念。其次如果有一定的开发经验或者C方面的概念,那么理解起来更方便。
实际上硬连结就像给一个数据起了一个别名,符号链接就像一个指向了该数据的指针。因此如果数据有多个别名,那么删除任意一个都不会影响原数据,其它的别名照样可以访问。如果是符号链接,访问数据的时候就像通过C语言的*来访问指针指向的数据,如果删除了该指针指向的内容,那么原数据肯定会被删除。其它指向该数据的指针也无法访问该数据。