硬链接与软链接的联系与区别

硬链接与软链接的联系与区别

我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。下图展示了程序通过文件名获取文件内容的过程。

1. 通过文件名打开文件

                                              1.jpg

硬链接

为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名(见  2.hard link 就是 file 的一个别名,他们有共同的 inode)。硬链接可由命令 link ln 创建。如下是对文件 oldfile 创建硬链接。

 

[root@mutu #2 ~]# ln oldfile newfile

2.jpg

多个档名对应同一个inode,硬链接只是在某个目录下新增一笔档名链接到某个inode号码的关联记录而已。如果将上图中任何一个档名删除,档案的inodeblock都还存在,依然还可以通过另一个档名来读取正确的档案数据。此外,不论用哪一个档名来编辑,最终的结果都会写入相同的inodeblock中,因此均能进行数据的修改

 

建立硬链接

[root@mutu #17 ~]# ln oldfile newfile

[root@mutu #18 ~]# ll oldfile newfile

-rw-r–r–. 2 root root 0 Oct 20 21:19 newfile

-rw-r–r–. 2 root root 0 Oct 20 21:19 oldfile

[root@mutu #21 ~]# ls -li oldfile newfile

68547 -rw-r–r–. 2 root root 0 Oct 20 21:19 newfile

68547 -rw-r–r–. 2 root root 0 Oct 20 21:19 oldfile

 

软链接

3.jpg

多个档名对应同一个inode,硬链接只是在某个目录下新增一笔档名链接到某个inode号码的关联记录而已。如果将上图中任何一个档名删除,档案的inodeblock都还存在,依然还可以通过另一个档名来读取正确的档案数据。此外,不论用哪一个档名来编辑,最终的结果都会写入相同的inodeblock中,因此均能进行数据的修改尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一些不足之处:
1.不允许给目录创建硬链接。
2.
不可以在不同文件系统的文件间建立链接。因为 inode 是这个文件在当前分区中的索引值,是相对于这个分区的,当然不能跨越文件系统了。

2. 软链接的访问

4.jpg

软连接就是建立一个独立的文件,而这个文件会让数据的读取指向它link的那个档案的档名,由于只是作为指向的动作,所以当来源档案被删除之后,软连接的档案无法开启,因为找不到原始档名。连结档的内容只有档名,根据档名链接到正确的目录进一步取得目标档案的inode,最终就能够读取到正确的数据。如果目标档案的原始档名被删除了那么整个环节就进行不下去了。

 

[root@mutu #30 etc]# ls -li system-release  centos-release

389400 -rw-r–r–. 1 root root 38 Dec  9  2015 centos-release

389411 lrwxrwxrwx. 1 root root 14 Oct 12 01:58 system-release -> centos-release

 

从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是完全不同的。

区别:

硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;

2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;

3.链接数目是不一样的,软链接的链接数目不会增加;

4.文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,centos-release大小是38B,而system-release14B。因为centos-release共有3个字符

5.软链接没有任何文件系统的限制,任何用户可以创建指向目录的符号链接

总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文

之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文

当然软链接也有硬链接没有的缺点:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

原创文章,作者:mutu,如若转载,请注明出处:http://www.178linux.com/53715

(1)
mutumutu
上一篇 2016-10-23 17:57
下一篇 2016-10-23 19:20

相关推荐

  • 基于keepalived实现高可用nginx服务

    基于keepalived实现高可用nginx服务 环境及配置前提说明 主机1,ip:192.168.25.140 运行web服务 主机2,ip:192.168.25.141 运行web服务 主机3,ip:192.168.25.138 运行nginx服务和keepalived服务 主机4,ip:192.168.25.139 运行nginx服务和keepaliv…

    Linux干货 2016-11-07
  • liunx的哲学思想

     Linux哲学思想 *一切皆文件(硬件、目录、普通文件、二进制文件等。) *小型,单一用途的程序 *链接程序,共同完成复杂的任务 *避免令人困惑的用户界面 *配置数据存储在文本中 解释:一切皆文件:是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型…

    Linux干货 2017-07-15
  • 理解Inode

    inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础。 我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念,从而大大简化用户接口。 下面就是我的inode学习笔记,尽量保持简单。 一、inode是什么? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最…

    Linux干货 2015-03-20
  • 语言的歧义

    语言是人与人相互沟通的途径,而计算机语言则是人和计算机沟通的途径。就算是任何再完美的自然语言都会有歧义,但是又是什么让人和计算计算机间产生了歧义呢?下面这篇文章来自Gowri Kumar的Puzzle C一文。我做了一些整理,挑选了其中的一些问题,并在之后配上相应的答案(这些答案是我加的,如果需要原版的答案可以直接和本文作者Gowri Kumar联系,作者的…

    Linux干货 2016-05-08
  • CentOS系统启动流程

    Linux系统(Centos 5、6)启动流程 一、POST加电自检 Power-On-Self-Test 按下电源键以后,系统调用存储在ROM中的BIOS和存储在RAM中的CMOS(用来保存各项参数的设定)完成系统硬件状态的检查,如果硬件有问题则提示用户问题严重无法开机的会发出警报声音;硬件自检完成后进入下一步。 二、Boot Sequence与…

    Linux干货 2016-11-24
  • keepalived实现lvs的高可用

    lvs可以做到内核级别的四层负载均衡,具有非常强悍的负载均衡能力。但是,当我们构建lvs的负载均衡集群的时候也会面临一些很严重的问题: lvs的单点故障:当lvs负载均衡器出现故障的时候,那么后端所有的服务器都将无法访问; lvs对后台服务器没有健康监测机制:当后台服务器宕机之后lvs还是会调度服务到后台的服务器; 所以我们就需要一款工具来解决以上问题。 k…

    2017-07-03