软硬链接的区别

软、硬链接的区别
索引的概念:Linux文件系统使用索引节点来记录文件信息,作用类似于Windows下的文件分配表。索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。 
  linux文件系统将文件索引节点号和文件名同时保存在目录中。  
对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号, 却可以有多个文件名与之对应。 
 因此,在磁盘上的同一个文件可以通过不同的路径去访问它。

软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录。
硬链接则透过文件系统的inode来产生新档名,而不是产生新档案。
创建方法 :
软链接(符号链接) ln -s source target
硬链接 (实体链接)ln source target
硬链接是多个档名对应同一个inode,硬链接只是在某个目录下新增一笔档名链 接到某个inode号码的关联记录而已。如果将上图中任何一个档名删除,档案的inode与block都还存在,依然还可以通过另一个档名来读取正确的档 案数据。此外,不论用哪一个档名来编辑,最终的结果都会写入相同的inode和block中,因此均能进行数据的修改。
软链接是建立一个独立的文件,而这个文件会让数据的读取指向它link的那个档案的档名,由于只是作为指向的动作,所以当来源档案被删除之后,软连接的档案无法开启,因为找不到原始档名。连结档的内容只有档名,根据档名链接到正确的目录进一步取得目标档案的inode,最终就能够读取到正确的数据。如果目标档案的原始档名被删除了那么整个环节就进行不下去了。
eg: 现有两个文件 一个名为aaa ,另一个名为ccc;
在这里插入图片描述
在这里插入图片描述
给aaa创建一个硬链接
ln aaa aaahard
在这里插入图片描述
在创建链接前,aaa显示的链接数目为1,创建链接后
1.aaa和aaahard的链接数目都变为2。
2.aaa和aaahard的inode号是一样的,都是33579676。
3.aaa和aaahard显示的文件大小也是一样,都是17B。
ln命令的操作结果:aaa和aaahard是同一个文件的两个名字, 它们具有同样的索引节点号和文件属性,建立文件aaa的硬链接,就是为 aaa的文件索引节点在当前目录上建立一个新指针。你可以删除其中任何一个,如rm aaa,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。
给ccc创建一个软链接
ln -s ccc cccsoft
在这里插入图片描述
区别:
1.硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;
2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
3.链接数目是不一样的,软链接的链接数目不会增加;
4.文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,ccc大小是8B,而BBBsoft是3B。因为ccc共有3个字符
5.软链接没有任何文件系统的限制,任何用户可以创建指向目录的符号链接
总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。
软链接的缺点:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

猜你喜欢

转载自blog.csdn.net/wq962464/article/details/84060510