前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux软链接与硬链接实战解析

Linux软链接与硬链接实战解析

作者头像
公众号guangcity
发布2019-09-20 17:24:18
6.1K0
发布2019-09-20 17:24:18
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

1.硬链接

一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。

这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。

执行ln a.c a.c.bak后,硬链接数加1。

每创建一个硬链接,硬链接数加1,并不会增加额外的空间。软链接是原文件的快捷方式。

45360233表示inode值,类似于C语言中的指针,指向了物理硬盘的一个区块,文件系统会维护一个引用计数,只要有文件指向这个区块,它就不会从硬盘上消失。

两个inode值一样,都指向同一个区块。

inode学习

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。这是Linux文件系统管理文件的方式。在建立文件系统时,会建立一个索引节点表,里面包含一定数量的索引节点。每当建立一个文件时,就会为他分配一个索引节点号,相当于文件的地址。

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据

使用ls -i命令,可以看到文件名对应inode号码。

inode的特殊作用

由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

  1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

2.软链接

假设有个文件a.c与b.c,那么文件a.c和文件b.c的inode号码虽然不一样,但是文件b.c的内容是文件a.c的路径。读取文件b.c时,系统会自动将访问者导向文件a.c。因此,无论打开哪一个文件,最终读取的都是文件a.c。这时,文件b.c就称为文件a.c的"软链接"(soft link)或者"符号链接(symbolic link)。

创建一个软链接,加-s参数,ln -s a.c b.c

查看上述inode值,发现软链接文件的inode值不同。并且它的文件属性上也有一个 l的 flag,这就说明它与之前我们创建的两个文件根本不是一个类型。

当删除原文件a.c时候,查看硬链接文件不变,但是查看软链接的文件b.c,会发现报错。

之前的硬链接没有丝毫地影响,因为它 inode 所指向的区块由于有一个硬链接在指向它,所以这个区块仍然有效,并且可以访问到。

然而软链接的 inode 所指向的内容实际上是保存了一个绝对路径,当用户访问这个文件时,系统会自动将其替换成其所指的文件路径,然而这个文件已经被删除了,所以自然就会显示无法找到该文件了。

最后,我们复原a.c,再来看b.c。

发现,a.c与a.c.bak的inode不一样,因为此时是新文件,自然inode不一样,同样文件内容也不同。而当查看软链接的b.c文件的时候,此时没报错,说明复原了b.c。

文件夹软链接

文件夹硬链接

综上可以发现,凡是文件都可做软或硬链接,但是文件夹则是只能做软链接。

3.总结

1.硬链接是通过索引节点进行的链接。在Linux中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。如果删除硬链接对应的源文件,则硬链接文件仍然存在,而且保存了原有的内容,这样可以起到防止因为误操作而错误删除文件的作用。由于硬链接是有着相同 inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件。

2.软链接(也叫符号链接)与硬链接不同,文件用户数据块中存放的内容是另一文件的路径名的指向。软链接就是一个普通文件,只是数据块内容有点特殊。软链接可对文件或目录创建。(快捷方式指的就是软链接)。

软链接主要应用于以下两个方面:一是方便管理,例如可以把一个复杂路径下的文件链接到一个简单路径下方便用户访问;另一方面就是解决文件系统磁盘空间不足的情况。例如某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中,这样就可以很好的解决空间不足问题。删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。

3.硬链接使用场景少。

You generally should not use hard links anyway

也就是不建议使用硬链接,确实应用场景不多,但存在即合理,有时用其拷贝文件防止误删。

参考资料:

1.https://www.linuxprobe.com/soft-hard-links-comments.html

2.inode理解

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.硬链接
  • 2.软链接
  • 3.总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档