0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

硬链接与软链接的创建过程详解

5RJg_mcuworld 2017-12-11 14:26 次阅读

Linux 系统中有软链接和硬链接两种特殊的“文件”。

软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录。

硬链接则透过文件系统的inode来产生新档名,而不是产生新档案。

创建方法都很简单:

软链接(符号链接) ln -s source target

硬链接 (实体链接)ln source target

inode

要解释清楚两者的区别和联系需要先说清楚 linux 文件系统中的 inode 这个东西。当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即inode区和data block(实际数据放置在数据区域中)这个inode即是(目录、档案)文件在一个文件系统中的唯一标识,需要访问这个文件的时候必须先找到并读取这个 文件的 inode。 Inode 里面存储了文件的很多重要参数,其中唯一标识称作 Inumber, 其他信息还有创建时间(ctime)、修改时间(mtime) 、文件大小、属主、归属的用户组、读写权限、数据所在block号等信息。

通常会根据分区的用途来安排inode的数量(这是另外一个话题了),比如文件数量很多而文件都很小,则需要调增inode较大,以便能索引全部文件。否则将会出现这个分区并没有写满而无法写入任何文件的情况。

目录文件与档案文件

目录文件:记录该目录下的文件名

档案文件:记录实际文件数据

inode本身并不记录文件名,文件名记录在目录文件的block当中,所以新增、删除、更改文件名与目录的W权限有关。因此当我们要读某个档案时,就务必经过其目录的inode和block,然后才能够找到待读取档案的inode号,最终才会读到正确的档案block内的数据。系统是通过索引节点(而不是文件名)来定位每一个文件。

目录inode(满足权限?) => 目录block => 档案inode(满足权限?) => 档案block

硬链接

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

软连接

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

下面用一个实例来说明硬链接和软链接。

现在目录下有两个文件,一个名为AAA,一个名为BBB。引用$ ls -il963922 -rw-r--r-- 1 ocean ocean 92 2007-05-18 15:46 AAA963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 BBB

首先先做一个AAA的硬链接。引用$ ln AAA AAAhard$ls -il963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAA963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAAhard963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 BBB

这里我们注意在创建链接前,AAA显示的链接数目为1,创建链接后1.AAA和AAAhard的链接数目都变为2。2.AAA和AAAhard的inode号是一样的,都是963922。3.AAA和AAAhard显示的文件大小也是一样,都是92B。

可见进行了ln命令的操作结果:AAA和AAAhard是同一个文件的两个名字, 它们具有同样的索引节点号和文件属性,建立文件AAA的硬链接,就是为 AAA的文件索引节点在当前目录上建立一个新指针。你可以删除其中任何一个,如rm AAA,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。

尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一些不足之处:1.不允许给目录创建硬链接。2.不可以在不同文件系统的文件间建立链接。因为 inode 是这个文件在当前分区中的索引值,是相对于这个分区的,当然不能跨越文件系统了。

接着我们做一个指向BBB的软链接,软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。引用$ ln -s BBB BBBsoft$ ls -il总用量 0963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAA963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAAhard963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 BBB963924 lrwxrwxrwx 1 ocean ocean 3 2007-05-18 15:47 BBBsoft -> BBB

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

区别:1.硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;3.链接数目是不一样的,软链接的链接数目不会增加;4.文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,BBB大小是95B,而BBBsoft是3B。因为BBB共有3个字符

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

总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11322

    浏览量

    209869
  • 软链接
    +关注

    关注

    0

    文章

    8

    浏览量

    2231
  • 硬链接
    +关注

    关注

    0

    文章

    8

    浏览量

    2066

原文标题:Linux文件系统的硬链接与软链接

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一文弄懂Linux链接链接

    在Linux系统下,有两种链接文件:一种是链接(Hard Link);另一种是链接,也称为符号链接
    发表于 10-21 14:26 1356次阅读

    Linux中的链接的区别

    源文件同步。   而链接类似于拷贝,但是却拥有同步更新的功能,再此我们可以验证。   首先在/test目录下创建文件link   (1) 分别穿件link的连接文件和
    发表于 02-04 16:34

    Linux文件系统的链接链接

    创建方法都很简单:1. 链接(符号链接) ln -ssourcetarget 2. 3. 链接
    发表于 12-06 10:55

    Linux文件系统的链接链接

    创建方法都很简单:1.链接(符号链接) ln -ssourcetarget2.3.链接
    发表于 12-06 13:34

    【Linux基础】Linux链接简介

    添加一个链接,文件的链接数就加1。  链接文件有两个限制  1)、不允许给目录创建
    发表于 09-20 15:47

    【Linux基础】Linux链接简介

    的优点:  链接克服了链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接
    发表于 09-20 15:50

    linux下链接链接的区别

    在linux系统中,链接分两种 :一种被称为链接(Hard Link),另一种被称为符号链接链接
    发表于 11-15 16:26

    嵌入式开发的链接链接有什么不同吗

    为了搞懂这二者关系,我在网上搜集了不少的资料,特意整理一番。1、链接链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。
    发表于 12-21 06:00

    链接链接的区别在哪

    链接链接的区别  链接(hard link):A是B的
    发表于 12-21 07:21

    你知道Linux连接和链接

    Linux链接分两种,一种被称为链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接
    发表于 04-25 18:00 1696次阅读

    需要了解Linux的链接链接

    链接链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS)
    发表于 04-28 17:01 788次阅读
    需要了解Linux的<b class='flag-5'>硬</b><b class='flag-5'>链接</b>与<b class='flag-5'>软</b><b class='flag-5'>链接</b>

    ln 连接与链接两者有什么区别

    ln命令可以生成链接链接,也可叫做符号链接和实体链接
    发表于 11-12 14:35 4141次阅读

    Linux中的链接链接都用在哪些场合?

    最近,看到很多文章都在介绍 Linux 中的文件系统,其中就包括:inode 节点、链接链接等重要的概念。 于是就有小伙伴私信问我:这些概念我都懂,但是我能利用他们来完成什么工作
    的头像 发表于 06-21 16:33 1686次阅读

    链接PK链接

    链接PK链接
    的头像 发表于 10-12 18:16 1177次阅读

    链接链接的区别

    链接又叫符号链接,和原文件不是一个文件,类似Windows的快捷方式,如果原始文件被删除,所有指向它的符号链接也就都被破坏了
    的头像 发表于 04-19 10:09 1232次阅读
    <b class='flag-5'>软</b><b class='flag-5'>链接</b>与<b class='flag-5'>硬</b><b class='flag-5'>链接</b>的区别