@author:corey
转载请注明出处
在了解这两种链接方式之前,我们先了解一下什么是inode
我们首先来看一看硬盘的整体结构
硬盘中包含很多硬盘盘片,这么硬盘盘片组成了“一摞”也就是一个”圆柱“的硬盘;
一个硬盘盘片是圆形的,在每个硬盘盘片上都有一个读写的磁头,将这个磁头固定,然后把盘片旋转一周,
那么这个磁头所走的一个圆周就是一个“磁道”,这一摞盘片相应的磁道,我们顾名思义的叫着”磁柱“
然后每一个磁道被分成很多个区域,我们叫做“扇区”扇区是最小的物理存储量,一般一个扇区的大小为
512个字节,也就是0.5k;
知道了磁盘的大体结构以后,我们再来看看怎么对硬盘进行分区,对硬盘进行分区的最小单位是”磁柱“,
分割完了以后我们就要进行”格式化“,在linux中进行格式化,我们要考虑block和inode,block就是由多个
扇区组成的,可以记录的最小单位,大小一般就是n*512byte,例如4k;
哪么inode是什么呢?block是记录文件内容数据的区域,inode就是距离该文件的属性以及他的block的位置等
信息的,所以每个文件都会至少占用一个inode,这也是为什么我们在系统里面删除文件了,还能够利用一些
工具恢复的原因,因为我们删除文件的时候只是把这个inode记录抹掉了,从而让系统找不到这个内容的入口,
当然,比如瑞星的文件粉碎就是直接把block里面的数据格式化掉了,言归正传,当linux在搜索文件的时间,
他会先搜索这个文件系统的inode table,然后对照里面的info查找相应的block,然后把磁头放在相应的位置
进行读写,在进行格式化的时候,inode的数量是可事先得出的,这也是一些文件系统的差异啦,当我们采取
某种文件系统的时候,他的block的容量假如是8k,那么硬盘大小/block大小,那么就可以得到inode的数量,
一个inode的大小是128byte,这样,我们的硬盘就被格式化了;
所以,一个分区被格式化以后,就被分成了inode table和数据库两打大部分,一个用来记录文件的属性信息和
该文件所对应的block,一个用来记录文件的内容;
下面,我们来介绍两种链接
1)硬链接:
硬链接就是再建立一个inode,将这个inode指向这个文件的block,事实上,这个文件的内容是不会发生改变
的,还是存储在原来block的里面,只不过,这个文件的内容通过查询原来的inode和后来建立的inode都可以
找到,所以,这也是为什么硬链接在删除了文件的时候,还是能够找到文件的原因,因为删除文件的时候,只
是把原来的inode删除了,但是block里面的内容并没有清空,依然可以通过后来的硬链接找到;
但是这样导致的问题是,一个目录本身是没有数据内容的,所以他本来就只消耗inode,而硬链接的inode会
指向block,所以,硬链接是不能指向目录的;
硬链接的缺点
1):不能指向目录
2):不能跨越文件系统;
符号链接:
符号链接会再建立一个独立的文件,而这个文件会让数据读取操作指向他链接的哪个文件,由于只是利用文件
作为了一个指向的动作,读取----->符号链接建立的文件------>真实文件的inode---------->真实文件的block
这里的意味颇像java web中的forward,如果删除了原文件,那么上面的传递链就会在真实的inode发生断裂,找
得不到原文件的内容block,这也是为什么符号链接在删除原文件的时候失效的原因;
在linux下面
建立硬链接shell命令是
ln source_file directory_file
符号链接命令是
ln -s(soymbolic) source_file directory_file