首页 > 代码库 > 软连接与硬链接区别

软连接与硬链接区别

前言:

今天学习了文件系统,简单的接触到文件系统构成的原理。原来我们不管在linux和win上面删除某个文件只是删除一个链接而已。而linux把链接分为软链接和硬链接。接下来我们就从文件系统构成的基本原理出发来说明下linux软链接和硬链接的区别。

文件系统简述:

linux的哲学就是一切皆文件。为了方便人们的使用,我们可以通过看文件名来区分不同的文件。但作为只识别0 1 的机器,让它识别一串文字肯定复杂的多。所以linux文件系统用一串数字来标识一个文件,而且这个数字在文件所处的分区中是唯一存在的。这串数字就是inode号。那inode是什么? 文件主要有两个部分数据构成,即元数据(metadata)和数据(data)。数据就是我们向往文件中保存的数据,元数据则是一些与文件内容本身无关,但为了管理文件或者操作文件所必要的一些信息。比如:文件的大小,文件的权限等等。我们把数据以文件系统规定的方式存储在规定的地方(此内容在具体介绍文件系统时再深入了解),把元数据存储在一个叫做inode的局域。全称index node(索引节点)。inode也保存的元数据中包含了文件数据的位置。这也是系统能通过inode号找到文件的原因。

前文已经提到我们我们所能看到的文件名只是为了方便我们自己,而linux系统内部是不使用文件名,是使用inode号码来识别文件的。我们把文件保存在目录中。目录文件的结构非常简单,就是一系列项的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。一定得明白目录的本质。这样才有利于明白后面目录的读,写,执行权限。现在我们就可以好好说道说道,用户通过文件名,打开文件到底发生了什么。实际上,系统内部这个过程分成三步,首先,系统通过目录文件中的对应项,找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据在什么为位置,读取数据。

硬链接:

虽然文件包含了元数据和数据。但是这个两个数据并不是存储在一起的。分别划分两个专门的区域,一个区域(inode)保存元数据,一个区域保存数据。若一个inode号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名,即以不同的名字指向了同一个文件。因为inode号只在本分区中唯一,所以硬链接不能跨分区,而且硬链接不能指向一个目录文件。元数据中还保存了文件的硬链接个数,当我们删除一个硬链接时,文件的硬链接个数就减一,当硬链接个数为零时,这个文件所占有的空间就会释放。文件释放也仅仅是没有了指向数据的链接。数据本身依然还存在于磁盘中。所以我们一般删除文件的操作只是删除一个指向文件的链接而已。

软连接:

硬链接有自身的限制,比如;不能跨分区创建,不能对目录创建。而软链接则天生没有这样的问题,软连接是一个单独的文件有不同于被链接文件的inode号,而且软连接指向的不是文件的数据,而只是指向文件名,它并不关心文件的内容是什么。所以软连接会存在无效链接的情况,就是找不到被链接的文件。因为inode是占磁盘空间的,所以软连接文件本身也是有文件大小的并且会占用一个inode号,inode号本身也是有限资源。


本文出自 “机制小风风” 博客,请务必保留此出处http://xiaofengfeng.blog.51cto.com/8193303/1870404

软连接与硬链接区别