linux中链接包括两种类型:软链接和硬链接。两者的区别如下:
- 硬链接和对应的链接源文件指向同一个inode,通过ls -i命令查看可发现两者的inode节点值相同。
软链接和对应的链接源文件的inode节点值不同,软链接其实指向的是对应的链接源文件,不是直接指向原始inode数据,两者指向不同的数据块。
通过文件大小可以看到,源文件test1.txt、硬链接文件test2.txt的大小均为0,因为没有写入任何数据。而软链接文件test3.txt大小为9字节,即它的源文件名“test1.txt”大小(sizeof("test1.txt")=9)。
- 硬链接其实相当于建立一系列文件名和实际文件数据inode的对应映射关系,各个文件名和inode的映射相互独立,互不影响。删除任意一个文件,其他硬链接文件仍然可以正常映射到对应的inode,正常读写,其实此时该文件没有真正删除。只有当所有的源文件、硬链接文件都删除,对应的文件才是真正意义上的删除。
软链接指向的是它的源文件内容,完全依赖它的源文件(类似于windows下的快捷方式)。当删除源文件时,关联的软链接文件将不可能
做如下测试:
向源文件写入数据:
此时删除源文件,并再次读取硬链接文件test2.txt、软链接文件test3.txt
发现硬链接文件test2.txt仍然可以正常读取,而软链接文件test3.txt已不存在,报错。