加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么是 ‘.’ Unix中的硬链接?

发布时间:2020-12-15 20:57:36 所属栏目:安全 来源:网络整理
导读:我已经看到很多解释为什么基于Unix的操作系统中空目录的链接计数为2而不是1.他们都说这是因为’.’目录,每个目录都指向自己.我理解为什么要有’.’的概念.对于指定相对路径很有用,但是在文件系统级别实现它会获得什么?为什么不只是让 shell或系统调用知道如
我已经看到很多解释为什么基于Unix的操作系统中空目录的链接计数为2而不是1.他们都说这是因为’.’目录,每个目录都指向自己.我理解为什么要有’.’的概念.对于指定相对路径很有用,但是在文件系统级别实现它会获得什么?为什么不只是让 shell或系统调用知道如何解释它?

那个’..’是一个真正的链接对我来说更有意义 – 文件系统需要将指针存储回父目录才能导航到它.但我不明白为什么’.’是一个真正的联系是必要的.它似乎也导致了实现中一个丑陋的特殊情况 – 你会认为你只能释放链接数小于1的inode使用的空间,但是如果它们是目录,你实际上需要检查链接数小于2.为什么不一致?

解决方法

(嗯:以下现在有点像史诗……)

unix文件系统上的目录设计(通常是迂腐的,但通常不一定附加到unix操作系统)代表了一种奇妙的洞察力,实际上减少了所需的特殊情况.

“目录”实际上只是文件系统中的一个文件.文件系统中文件的所有实际内容都在inode中(从你的问题来看,我可以看到你已经知道了一些这样的东西).磁盘上的inode没有任何结构 – 它们只是一大堆字节数字,在磁盘上像花生酱一样传播.这是没有用的,对任何一丝不苟的人来说确实是令人厌恶的.

唯一的特殊inode是inode number 2(出于传统原因,不是0或1); inode 2是一个目录文件:根目录.当系统挂载文件系统时,它’知道’它必须读取inode 2才能启动它.

目录文件只是一个文件,其内部结构旨在由opendir(3)和朋友读取.您可以在dir(5)中看到其内部结构(取决于您的操作系统);如果你看一下,你会发现目录文件条目几乎没有关于该文件的信息 – 这些都在文件inode中.关于这个文件的一些特别之处是,如果你试图用允许写入的模式打开一个目录文件,open(2)函数将会出错.各种其他命令(仅选择一个示例,hexdump)将拒绝以正常方式使用目录文件,因为这可能不是您想要做的(但这是他们的特殊情况,而不是文件系统).

硬链接只不过是目录文件映射中的条目.您可以在此类映射中包含两个(或更多)条目,这两个条目都映射到相同的inode编号:因此该inode具有两个(或更多)硬链接.这也解释了为什么每个文件至少有一个“硬链接”. inode有一个引用计数,它记录文件系统中某个目录文件中提到的inode的次数(这是你执行ls -l时看到的数字).

好的:我们现在已经到了这一点.

目录文件是字符串(‘文件名’)到数字(inode编号)的映射.这些inode编号是该目录中“文件”的inode编号. “目录”中的文件可能包含其他目录文件,因此它们的inode编号将在目录中列出的文件中.因此,如果你有一个文件/ tmp / foo / bar,那么目录文件foo包含一个bar条目,将该字符串映射到该文件的inode.在目录文件/ tmp中还有一个条目,用于目录文件foo,它位于目录/ tmp中.

使用mkdir(2)创建目录时,该函数

>使用正确的内部结构创建一个目录文件(带有一些inode编号),
>在父目录中添加一个条目,将新目录的名称映射到这个新的inode(占其中一个链接),
>在新目录中添加一个条目,映射字符串’.’到相同的inode(这解释了另一个链接),和
>在新目录中添加另一个条目,将字符串’..’映射到它在步骤(2)中修改的目录文件的inode(这说明了您在目录文件中看到的大量硬链接子目录).

最终结果是(几乎)唯一的特殊情况是:

> open(2)函数试图通过阻止打开目录文件进行写入来使自己更难在脚中射击.> mkdir(2)函数通过向新目录文件添加一些额外的条目(‘.’和’..’)使事情变得简单易行,纯粹是为了方便移动文件系统.我怀疑文件系统在没有“.”的情况下运行良好.和’..’,但使用会很痛苦.>目录文件是被标记为“特殊”的少数几种文件类型之一 – 这实际上就是说open(2)之类的行为略有不同.请参阅stat(2)中的st_mode.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读