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

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

3天内不再提示

Linux系统中软链接和硬链接到底有什么区别

Wildesbeast 来源:今日头条 作者:Linux速推文章 2020-04-06 17:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

什么是链接?

链接简单说实际上是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件。

它是用来干什么的?

你可以将链接简单地理解为 Windows 中常见的快捷方式(或是 OS X 中的替身),Linux 中常用它来解决一些库版本的问题,通常也会将一些目录层次较深的文件链接到一个更易访问的目录中。在这些用途上,我们通常会使用到软链接(也称符号链接)。

内容

软链接和硬链接的区别是?下面我们进入正题,来探讨一下软硬两种链接到底有什么区别?

首先,从使用的角度讲,两者没有任何区别,都与正常的文件访问方式一样,支持读写,如果是可执行文件的话也可以直接执行。

那区别在哪呢?在底层的原理上。

为了解释清楚,我们首先在自己的一个工作目录下创建一个文件,然后对这个文件进行链接的创建:

$ touch myfile && echo "This is a plain text file." > myfile $ cat myfile This is a plain text file.

现在我们创建了一个普通地不能再普通的文件了。然后我们对它创建一个硬链接,并查看一下当前目录:

$ ln myfile hard $ ls -li 25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 hard 25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 myfile

在 ls 结果的最左边一列,是文件的 inode 值,你可以简单把它想成 C 语言中的指针。它指向了物理硬盘的一个区块,事实上文件系统会维护一个引用计数,只要有文件指向这个区块,它就不会从硬盘上消失。

你也看到了,这两个文件就如同一个文件一样,inode 值相同,都指向同一个区块。

然后我们修改一下刚才创建的 hard 链接文件:

$ echo "New line" >> hard $ cat myfile This is a plain text file. New line

可以看到,这两个文件果真就是一个文件。 下面我们看看软链接(也就是符号链接)和它有什么区别。

$ ln -s myfile soft $ ls -li 25869085 -rw-r--r-- 2 unixzii staff 36 7 8 17:45 hard 25869085 -rw-r--r-- 2 unixzii staff 36 7 8 17:45 myfile 25869216 lrwxr-xr-x 1 unixzii staff 6 7 8 17:47 soft -> myfile

诶,你会发现,这个软链接的 inode 竟然不一样啊,并且它的文件属性上也有一个 l 的 flag,这就说明它与之前我们创建的两个文件根本不是一个类型。

下面我们试着删除 myfile 文件,然后分别输出软硬链接的文件内容:

$ rm myfile $ cat hard This is a plain text file. New line $ cat soft cat: soft: No such file or directory

之前的硬链接没有丝毫地影响,因为它 inode 所指向的区块由于有一个硬链接在指向它,所以这个区块仍然有效,并且可以访问到。 然而软链接的 inode 所指向的内容实际上是保存了一个绝对路径,当用户访问这个文件时,系统会自动将其替换成其所指的文件路径,然而这个文件已经被删除了,所以自然就会显示无法找到该文件了。

为验证这一猜想,我们再向这个软链接写点东西:

$ echo "Something" >> soft $ ls hard myfile soft

可以看到,刚才删除的 myfile 文件竟然又出现了!这就说明,当我们写入访问软链接时,系统自动将其路径替换为其所代表的绝对路径,并直接访问那个路径了。

总结

总结到这里我们其实可以总结一下了:

硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。

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

    关注

    88

    文章

    11814

    浏览量

    219534
  • WINDOWS
    +关注

    关注

    4

    文章

    3705

    浏览量

    94319
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案

    ​ 在电商数据应用、比价系统搭建、库存监控等场景,通过 API 实现淘宝链接解析与商品详情获取是核心技术环节。但淘宝开放平台的权限限制、反爬虫机制及数据格式差异,常让开发者踩坑。本文结合官方规范
    的头像 发表于 04-13 16:23 122次阅读

    如何电源管理电池供电和线路供电系统之间什么区别

    如何电源管理电池供电和线路供电系统之间什么区别
    发表于 04-06 08:24

    富士通F²MC - 16LX系列微控制器链接套件功能解析

    富士通F²MC - 16LX系列微控制器链接套件功能解析 在电子工程领域,微控制器的高效使用和开发是至关重要的。今天我们来深入探讨富士通F²MC - 16LX系列微控制器链接
    的头像 发表于 03-28 12:50 323次阅读

    到底有多小?

    想知道硅到底有多小;CPU 并不比 Wii 上的百老汇芯片大,但功能却无限强大,哈哈。
    发表于 03-25 06:51

    5G SA和NSA到底有啥不一样

    平时刷手机,只要稍微留意过 5G 设备或者运营商的信息,SA 和 NSA 这两个词应该不陌生。大家也知道它们跟 5G 有关,但真要问起它俩到底有什么区别,好像一下子也说不太明白。
    的头像 发表于 03-14 14:10 2485次阅读

    别再傻傻分不清!无线透传、Zigbee、2.4G模块到底怎么选?(附低功耗秘籍)

    在物联网项目选型时,很多工程师面对“无线透传模块”、“Zigbee模块”、“2.4G模块”这几个概念,常常感到一头雾水。它们到底有什么区别?在低功耗和小体积成为产品核心竞争力今天,我到底该选谁?
    的头像 发表于 03-14 10:56 1115次阅读

    kicad使用ai设计原理图无法链接到对应的封装

    在使用华秋板kicad的ai设计工具设计原理图后,原理图转pcb后无法链接到对应的封装,如下图所示,求解决,还是本来就是这样?
    发表于 01-30 17:52

    飞凌嵌入式ElfBoard-连接(符号链接)与连接之symlink和link

    将要指向的源文件。linkpath:链接链接文件名称。4.返回值成功返回0,失败返回-1,并会设置errno。 2.7.2 link用于创建
    发表于 01-04 09:10

    飞凌嵌入式ElfBoard-连接(符号链接)与连接

    Linux系统连接和连接两种不同的文件链接
    发表于 12-26 08:52

    请问jtag和jlink什么区别啊?

    jtag和jlink什么区别啊?
    发表于 11-28 06:46

    飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接

    是使用动态链接库的一个好处,可以防止核心算法的泄露。现在就可以将mymath.c删除掉了:直接调用库编译发现程序不能运行。下面将我们自己建立的库移动到/usr/lib目录下试试,然后发现代码运行成功。可以在Linux系统下自己尝
    发表于 10-17 09:07

    电磁干扰“江湖三兄弟”:EMC、EMI、EMS 到底有区别

    电磁干扰“江湖三兄弟”:EMC、EMI、EMS 到底有区别
    的头像 发表于 08-20 15:16 3062次阅读
    电磁干扰“江湖三兄弟”:EMC、EMI、EMS <b class='flag-5'>到底有</b>啥<b class='flag-5'>区别</b>?

    TVS ESD,都是保护二极管,什么区别?如何选型?

    关于TVS二极管和ESD二极管,常有客户问东沃电子DOWOSEMI:“同样是保护二极管,TVS和ESD到底有什么区别呢?”TVS二极管(瞬态电压抑制二极管)和ESD二极管(静电保护二极管)虽然都属于二极管类保护器件,但在设计目标、应用场景和性能参数上有显著差异。以下是两者
    的头像 发表于 07-10 16:37 2040次阅读
    TVS ESD,都是保护二极管,<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>?如何选型?

    漫画科普 | 功率放大器到底有哪些应用?带你解锁功放经典应用场景!(一)

    漫画科普 | 功率放大器到底有哪些应用?带你解锁功放经典应用场景!(一)
    的头像 发表于 06-20 20:00 1114次阅读
    漫画科普 | 功率放大器<b class='flag-5'>到底有</b>哪些应用?带你解锁功放经典应用场景!(一)

    实测 PTR54LS05低功耗到底有多低

    实测 PTR54LS05低功耗到底有多低?
    发表于 04-27 10:57