揭开链接文件的面纱——从根本上剖析硬链接与软链接异同

在linux的学习过程中,链接文件的学习让不少人头疼,很多同学往往分不清什么是硬链接,什么是软链接,对于两者的概念和区别常常容易混淆、搞不清楚。今天我们就从原理、从根本上为大家辨析一些两者之间的区别,相信大家在看完这篇文章之后对链接文件会有一个清晰正确的认识。

1、在实现原理上不同

硬链接,涉及到文件的底层模式,因此被称为硬链接文件。硬链接文件只是一个指针指向,确切的说并不是一个真正的文件,它只有一个文件名和指向原文件inode的指针,并没有分配自身的inode和datablock。

软链接,并不涉及文件系统底层,完全是靠软件方式实现的,因此被成为软链接。软链接文件是一个独立的文件,他的创建是需要单独分配相应的inode和datablock。软链接文件的inode是一个全新的inode,而datablock里面的内容所记录的是,指向原文件的一个路径和文件名。

链接文件.jpg 

2、跨分区链接

由于硬链接的创建需要从底层硬件上去指向特定的inode,而每个分区在格式化时都有自己单独的一套inode和datablock分配机制,因此为了保证inode指向的唯一性,硬链接通常只能在同分区内创建。

而软链接只是存储了原文件的访问路径,不涉及到inode的跨分区问题,因此在跨分区链接的创建上更为方便。

3、资源分配上

从硬链接和软链接的实现原理上我们可以看出,软链接创建出了一个全新的文件,而硬链接只是做了一个指针的指向。可以看出硬链接是不分配inode和datablock的,因此通常不占用系统资源和空间。

而软链接则会消耗系统inode和datablock资源,会占用一定的硬盘空间。需要说明的是软链接所占用的空间,其实并不大,因为它是文件内容,存储的只是指向原文件的一个访问路径,文件的大小为路径所占空间。

4、文件属性信息

硬链接由于指向的是原文件的inode,实质上硬链接和原文件其实是一个文件,只是文件名不同,因此硬链接文件与原文件在inode编号、文件权限、属主属组关系、时间戳及大小等属性上是完全相同的。但由于有两个指针指向同一个inode编号,因此创建硬链接,硬链接文件和原文件的硬链接数会加1,当删除时硬链接数减1。

软链接由于是一个全新的独立的文件,因此由于自己单独的inode和创建时间、属主属组信息,但权限信息上全部是rwx。软链接的创建、删除不会影响到硬链接数。

 

 图像 1.jpg

 

5、当原文件被删除、新建时

当原文件被删除时,实质上操作系统所做的并不是马上删除文件的数据和所占用的系统资源。系统所做的操作,首先是删除原文件的文件名对inode的指针指向,并删除文件名记录,同时会检查原文件所对应inode的指向数量,即硬链接数。如果硬链接数减1后大于0,则只是将硬链接数减1;如果硬链接数减1后为0,则说明没有指针指向该数据,则会把对应的inode和datablock标记为删除或可用(只是做了一个标记)。

因此,我们可以看出当原文件被删除后,inode和datablock实际上并没有被删除,由于仍然有硬链接指向该inode,因此也不会被标记为删除,所以对于硬链接来说,删除原文件,硬链接文件仍然是可以正常访问的,并且访问结果仍然是原文件的内容。

而对于软链接来说,其做的只是标记了原文件的访问路径和文件名,当原文件被删除后,原文件对数据的inode指向及文件名都会被删除;对于链接文件来说,就相当于访问路径上的文件已经不存在了,因此也就无法再找到原文件的数据,软链接的访问失效。

图像 2.jpg 

在原文件被删除后,如果再新建一个与原文件同名的文件,我们暂时把它叫做新文件吧。这时候我们会发下软链接文件又可以用了。但是我们会发行软链接指向的是新文件,访问软链接得到的不是原文件的内容,而是新文件的内容。当我们访问硬链接是时候我们会发行访问的仍然是原文件的信息,用ls -il来进行查看会发现新文件和硬链接文件的inode编号完全不同,并且硬链接数也不会增加。

图像 3.jpg 

 

6、创建链接文件时使用相对路径

在创建链接文件的时候我们可以使用绝对路径,但在有的时候我们会觉得使用相对路径会更有必要。但在使用相对路径来创建链接文件的时候会有较大的差异。

在创建硬链接文件的时候,由于指向的是原文件的inode,因此只要在创建的时候使用的路径能够找到对应的原文件,获得原文件的inode信息即可创建硬链接文件,因此无论使用绝对路径还是相对路径都可以成功创建硬链接。

但在创建软链接的时候,我们会发现出了点问题。在使用绝对路径创建软链接的时候很顺利,在使用相对路径来指向原文件的时候也很正常,但当链接文件和原文件不在同一路径而使用相对路径来指向链接文件的时候却发现创建的链接文件是无效的。这是为什么呢???其实也很好理解,因为我们要通过链接文件找到原文件,而不是通过原文件找到链接文件,而链接文件存放的也是指向原文件的访问路径,所以在使用相对路径来创建软链接文件的时候就必须要使用链接文件指向原文件的相对路径。也就是说使用相对路径来创建软链接文件的时候,链接文件的相对路径必须是当前目录,原文件使用的相对路径要使用相对要创建的链接文件的相对路径。

关于这点,就有引申出来一个问题。当链接文件被复制、移动到其他目录,其自身的访问路径发生改变的时候,如果软链接使用的是相对链接,就会出现软链接无法访问的情况。但是硬链接文件和使用绝对链接的软链接则不会出现访问问题。

7、对目录创建链接

软链接是可以直接链接向目录的,这个很容易理解。但是在linux系统中原则上(当然如果非要创建目录的硬链接,在技术上也是可以实现的)是不能创建目录的硬链接的,即硬链接不能链接到目录。这个大致可以从以下方面来理解。

从文件系统方面来讲,我们知道linux的文件系统是典型的树型结构,在使用软链接的时候,软链接本质上还是一个文件,但硬链接则是在文件系统本质上的一个指向,这严重的破坏了系统的文件结构。因为软链接有单独的inode是一个新的文件,对于电脑来说只是一个普通的文件来对待的,但是系统无法分别硬链接的两个文件哪个是原文件、哪个是新创建的链接文件,而目录是一个树的非叶子节点。当然对于目录不能创建硬链接,还有很多其他方面的诸多因素,对于这些因素并没有绝对的说法,在这里我们就不再一一分析列举,感兴趣的同学可以自行查阅相关资料深入研究。

虽然说目录不能创建硬链接,但当我们使用ls -l命令来查看目录文件的时候会发现,目录文件的硬链接数并不是1,并且当我们在目录下创建新子目录的时候会发现,目录的硬链接数增加了。这究竟是怎么回事呢???其实当你使用ls -ali 来查看目录下的内容的时候就会发现,每个目录下有两个特殊的目录指向 “.”和“..”。因此当一个目录被创建的时候,除了自身的链接数1之外,还有目录下面的一个“.”是指向该目录本身的,而在目录下创建子目录的时候,子目录中的“..”指向其父目录,也是指向该目录的。并且你会发行这些特殊目录的inode编号与目录的inode编号是相同的,也就是说他们都是目录的一个硬链接。

8、如何看一个文件是硬链接还是软链接

以上我们已经为大家辨析了什么是硬链接、什么是软链接以及两者之间有什么异同,知道通过软链接和硬链接我们都可以很方便的直接访问到原文件,但我们如何知道一个链接文件是软链接还是硬链接呢?

A、使用ls -i,如果两个文件的inode编号相同,则可以知道这两个文件是硬链接文件。

B、使用ls -l,如果文件类型位置是”l”,则该文件是一个软链接文件,在文件名的位置我们同时能够看到链接文件指向的原文件位置。

原创文章,作者:M21-张国辉,如若转载,请注明出处:http://www.178linux.com/53142

(2)
上一篇 2016-10-20 22:05
下一篇 2016-10-20 23:04

相关推荐

  • Linux文件类型及颜色标识

    文件类型(共7种): – :普通文件 d:目录文件 (directory) c:字符设备文件 (char) b:块设备文件 (block) s:本地域套接口 (socket) p:有名管道 (pipeline) l:符号连接 (link) 关于硬链接、软连接、复制之间的区别说明: 上图中,我为photo.png这个图片文件建立了一个拷贝(phot…

    Linux干货 2016-10-16
  • 高级文件系统管理

    高级文件系统管理 一、如何创建新的swap分区  答:1.在/dev/sdc上创建新的分区。并使得ID为82的linux swap;类型。   2.创建文件系统 mkswap  -L  SWAP_SDC1  /dev/sdc1     3.在/etc/fstab中进行修改   4…

    Linux干货 2016-08-30
  • 第一周博客作业

    前言:这几周的课程大部分开班前就掌握了的,这次学的细一点,顺便学一下markdown写博客、排版。内容有部分是前几期学员写的,觉得写得不错,就斗胆截取了,还有部分是自己写的,也有一些是百度到的内容。 目录 一、描述计算机的组成及其功能 二、linux发行版 三、linux哲学思想 四、常用命令 五、如何获取命令的帮助信息 六、linux发行版的基础目录名称命…

    Linux干货 2017-01-09
  • 我的第一篇博客

    2018.3.26 整理

    2018-03-26
  • 硬链接和软链接的区别

    硬链接和软链接在文件系统实现上的区别决定了两者之间功能上的不同,也就是说硬链接和软链在文件系统上两者实现的方式不同,让其各自具有不同的功能和特色,也决定了各自的优点和缺点。接下同文件系统上创建硬链接和软链接看各自的特点。 一文件系统上创建硬链接 下面命令是在文件系统上创建一个硬链接: ~]# ln test /testdir/t…

    Linux干货 2016-10-29
  • linux系统从windows xp上同步时间

    最近公司客户的调度系统GPS天文时钟出现故障,导致整个调度系统失去时间源,时间积累误差达十几分钟。去现场更换时钟很不方便,所有就想用现场的一台win xp(可上网)的远程机器做NTPserver,然后给linux系统对时。上网查了好多资料,终于找到了一个有效的解决方案,具体内容和步骤如下:首先下载一个Windows下的NTP服务软件。这个软件可以搭建wind…

    Linux干货 2015-03-27