软链接与硬链接的区别与联系
前言
在linux系统应用中,经常听到或者使用到硬链接与软链接技术。学习该技术对理解linux文件系统中很有帮助,因此学习掌握该技术很重要。本文将记录我对硬链接及软链接区别联系的
文章目录 前言 在linux系统应用中,经常听到或者使用到硬链接与软链接技术。学习该技术对理解linux文件系统中很有帮助,因此学习掌握该技术很重要。本文将记录我对硬链接及软链接区别联系的个人理解。 一、inode 其实,我们所看到的目录及filename都是操作系统为便于用户操作及自身管理而虚拟出来的。操作系统在其初始阶段基于磁盘的文件系统建立起存储在内存中用于管理磁盘数据的数据结构,这种结构就是目录树,并可视化。 文件存储的实现的关键问题是记录各个文件分别用到哪些磁盘块。inode便是处理该问题的一种方法。 1.文件 在linux系统里,文件包含两部分数据: 第一部分是真实的文件数据,存储在data block; 第二部分是存储文件的元数据信息,比如文件的创建者、文件的创建时间、文件大小等等。 这种存储文件元数据信息的存储区域就叫做inode table。通过索引节点,可以迅速定位到真实的文件数据。 inode中不记录文件名,文件名是被记录在目录文件中的(见下节)。文件名不是文件的固有属性,与文件不是一对一关系。 2.目录及文件名 目录也是一种文件,同样由inode与block两部分组成。其中linux软链接,inode记录着该目录的相关权属与属性;而block则是记录着在这个目录下的文件名与该文件名占用的inode号码数据,内容大概如下: 我们可以知道,文件名是记录在所属目录的block中的。 3.读取目录树 举例说明,操作系统是如何读取/home目录的呢?步骤如下: 1.获取根目录/的inode号码,进而找到根目录的block 2.在block中找到home目录名及其对应的inode号码 3.根据inode号码找到home目录的block,该block便记录着/home目录的信息 4.通过运算之后将信息按格式输出来 二、硬链接是什么 基于以上分析,文件名是记录在目录文件里的。所以,可以出现这种情况,不同的文件名对应同一个inode号码。也就是,不同的文件名对应同一块磁盘数据。若使用引用技术,当对同一块磁盘的引用计数减少至0时才删除该块磁盘记录,这样做将可以避免误删磁盘数据。硬链接就是这样实现的。 硬链接可以跨文件系统吗?不行。根据目录树读取过程,操作系统读目录的时候进入相应的文件系统,之后会认为该目录下的文件是在该文件系统下,直到遇到新的挂载点,操作系统才会重新识别该目录的文件系统。所以,如果跨文件系统,而操作系统只会在该文件系统查找文件,不会在其他文件系统中查找,矛盾了。当然了,这主要还的是系统设计说了算,这只是使用这种想法便于理解罢了。 硬链接可以链接目录吗?不行。如果可以的话,会造成不同目录具有相同的inode,会被操作系统认定为不同的文件系统,而硬链接是不能跨文件系统的,自相矛盾,故不成立。同样,这种解释只是便于理解该做法的一个说辞。 三、软链接是什么 为使删除原文件后,与其关联的相关文件都失效,linux引入了软链接。 软链接文件占用新的block,该block记录了所链接的目的文件的路径,当原文件被删除,操作系统将不认识记录在该block的信息,很自然地,该软链接接也失效了,若重新恢复原文件,软链接将重新生效。注意,如果该block信息是文件名,则操作系统只会在软连接文件同目录下查找该原文件。基于此原因,创建软链接时建议使用全路径,而不是相对路径。 因为目录也是文件,所以软链接目录是可行的。原理大概就是这样子的,软链接目录是文件,占新的block,该block记录原目录,显然很合理。 此外,软链接可以跨文件系统。软连接提供给操作系统的是路径,并作为输入,操作系统在读取目录过程中可以更新对目录文件系统的认识,所以说,软链接可跨文件系统。 总结 软链接: “软链接文件”是文件,该文件的block存放原文件的路径;软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名进行链接;软链接可以对目录进行链接。 硬链接: “硬链接文件”不是文件,只是名字,被记录在目录文件中;不允许给目录创建硬链接;硬链接只有在同一个文件系统中才能创建;删除其中一个硬链接文件并不影响其他有相同 inode 号的文件;硬链接必须要有原文件。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |