要理解软硬链接,就先要从ext文件系统的存储原理说起

 

硬盘上最小的存储单位是sector, 大小为512bytes.

因为数据往往都大于512bytes所以我们把多个sector连起来存储数据, 这样做的目的是减少磁盘I/O的负担

这个多个连起来的sector叫做block。Block的大小是2的n次方倍512bytes

 

存储空间分为:数据区和元数据区

数据区:block存储真实数据,一般大小为1kb 2kb, 4kb

元数据区: inode存储元数据,包括inode索引,名称,大小,修改时间等,inode为128bytes

 

ls –i可以查看文件对应的索引编号

stat 可以查看文件的inode信息

inode信息里面的索引标号应该和擦看文件信息的索引编号相对应的,如下图,a文件的索引编号都为1052822

Linux文件系统 软链接 硬链接_symbolic link

Linux文件系统 软链接 硬链接_sector_02

这里需要说明下,目录和文件在block存储的内容性质不一样

文件存储的是文件内容本身

目录要存储目录下所有文件的inode index和文件名,它的目的是帮助查找文件或其他目录


图详细描述了访问文件的过程

Linux文件系统 软链接 硬链接_sector_03


理解上图后我们来说说硬链接


我们考虑下如果/tmp目录下还有个b文件,它的inode index和a一样也是指向同一个inode

Linux文件系统 软链接 硬链接_Linux_04

这是我们就是a,b是彼此的硬链接

查看方式是ls –l a 或ls–l b, 属主前有个2,就是说有另外一个硬链接

Linux文件系统 软链接 硬链接_Linux_05

命令:ln被链接文件链接文件例如ln a b


软链接

Linux文件系统 软链接 硬链接_symbolic link_06


b的inode指向的内容是a文件的路径,再通过这个路径查找inode

查看方式是

Linux文件系统 软链接 硬链接_sector_07



这里的b是指向a的,而大小就是1个字节大小.也就是a这个相对路径

命令:ln–s被链接文件链接文件例如ln –s a b

软硬链接的区别

软链接:

·        可以跨分区链接-因为指向的只是路径

·        可以链接文件或目录

·        删除不影响源文件-和windows的快捷键类似

硬链接

·        不可以跨分区链接-应为inode只能被本区的文件指向

·        不可以链接目录-目录下的目录可能指向父目录,产生死循环

·        删除使inode的链接数降低为0在整个文件删除