linux硬链接与软链接的区别
首先了解一下inode:
inode中文意思是索引节点,每个存储设备或存储设备的分区被格式化为文件系统后,都应该有两部分内容:一部分是inode,另一部分就是Block。Block是用来存数据的,而inode是用来存储文件属性:文件大小、属主、归属的用户、读写权限等。
inode为每个文件索引,也就有了inode的;可以打个比方,比如一本书,Block相当于一本书的每一页,而inode相当于书的目录。
在LINUX下建立一个目录时,文件系统会给目分配一个inode与致少一个块。Inode记录该目录的相关属性,并指向分配到的那个块;块记录在这个目录下的相关文件(或目录)的关联性。
当建立普能文件时,文件系统会给该文件分配至少一个inode与相对应文件大小的块数量。
特别注意:inode本身不记录文件名,而是记录文件的相关联属性。文件名则是记录在目录所在的块区域。
硬链接---硬链接指通过索引节点来进行链接,在LINUX系统中,多个文件名指向同一个索引节点烛正常的,一般这种链接叫做硬链接。所以硬链接的作用就可以使一个文件拥有多个有效路径名,以防止误删除。
因为文件系统的原理是,只要目录的索引节点有一个以上的链接,只删除一个链接并不影响索引节点本身和其它链接(数据文件并未被删除),只有当最后一个链接被删除后,如果有新数据存储到硬盘时,文件的数据块和inode才会被占用,那么数据就找不回来了。
结论:LINUX系统删除文件其实就是删除文件所有的硬链接,硬链接可以看作是文件的入口,只有当所有指向文件的硬链接都被删除,这个文件才会被真正删除。
软链接---也叫符号链接,其实相当于WIND系统中的“快捷方式”,它是一种特殊的文件(它占用新的inode节点,和block块),软链接中包含的是另一个文件的位置信息。当删除源文件后,软链接文件也不能独立存在,会红色闪烁状态,并且打不开源文件内容。
示例:为一个普通文件创建硬链接,每多创建一个硬链接,其硬链接数加1,而且注意三个文件的inode节点数都是相同!所以互为硬链接的文件可以看作是同一个文件。我们删除源文件后,别外两个硬链接文件还是存在的,数据还在,因为还有另外两个inode指向Block。只有硬链接为0会,文件才会被真正删除。硬链接文件的属性都是相同的,可以仔细观察下面的实例。
硬链接不支持目录,这一点一定要注意!由于inode相同的文件互为硬链接,所以不支持跨分区那建立硬链接
下面是软链接的一个例子:每新建一个软链接,会分配一个新的inode,实际上这个inode保存了软链接文件的属性信息,但是其文件内空存储是指向源文件!并且mtime时间会改变,但硬链接数一直是1没有变化。当删除源文件后,链接文件失效,看不到源文件内容。由于软链接有不同的inode所以可以跨分区建立软链接,目录也同样可以建立软链接。
当我们修改软链接文件内容时,修改的其实是源文件的内容,所以源文件内容会改变,但是软链接文件属性会保持不变。
转载于:https://blog.51cto.com/3411257/1316114