一尘不染

符号链接后面有什么?

linux

UNIX / Linux系统如何在内部管理符号链接。众所周知,即使没有实际的目标文件也可能存在符号链接(悬挂链接)。那么在内部代表符号链接的是什么。

在Windows中,答案是reparse point

问题:

答案inode在UNIX / Linux中吗?

如果是,那么目标和链接的索引节点号是否相同?

如果是,链接inode可以具有与目标inode不同的权限(如果存在)吗?


阅读 581

收藏
2020-06-07

共1个答案

一尘不染

它不是关于UNIX / Linux,而是关于文件系统的实现-但是,是的,Unix /
Linux在内核级别使用inode,而文件系统的实现则具有inode(至少是虚拟的inode)。

通常,符号链接只是文件(顺便说一句,目录也是文件),它们具有:

  • 告诉系统此文件的“ inode”中的 标志 file-type是“符号链接”
  • file-content:目标的路径-换句话说:符号链接只是一个文件,其中包含在inode中带有标志的文件名。

虚拟文件系统也可以具有符号链接,因此,请检查FUSE或其他文件系统实现源。(ext2 / ext3 / ufs..etc)

所以,

答案是UNIX / Linux中的inode吗?

取决于文件系统的实现,但是可以,通常inode包含“文件类型”(以及所有者,访问权限,时间戳,大小,数据块的指针)。有些文件系统没有inode(在物理实现中),但是只有“虚拟inode”用于维护与内核的兼容性。

如果是,那么目标和链接的索引节点号是否相同?

没有 。通常,符号链接是一个具有自己的索引节点的文件(具有文件类型,自身的数据块等)。

如果是,链接inode可以具有与目标inode不同的权限(如果存在)吗?

这是关于 如何 处理符号链接文件的。通常,内核不允许更改符号链接权限-
符号链接始终具有默认权限。您可以编写自己的文件系统,以允许对符号链接使用不同的权限,但是您会遇到麻烦,因为像chmod这样的通用程序不会自行更改符号链接的权限,因此制作这样的文件系统将毫无意义。

要了解硬链接和符号链接之间的区别,您应该首先了解目录。

目录是告诉内核,“处理这个文件作为地图文件(通过在inode的标志区分)file- nameinode_number”。硬链接只是映射到same的文件名inode。因此,如果目录文件包含:

file_a: 1000
file_b: 1001
file_c: 1000

上面的意思是在这个目录中有3个文件:

  • 由inode 1000描述的file_a
  • 由inode 1001和
  • FILE_C由inode的1000(所以这是一个硬链接再次描述 FILE_A,不是硬连接 -因为它是不可能告诉这名来到第一个-它们是相同的FILE_A)。

This is the main difference to symlinks, where the inode of file_b (inode
1001) could have content “file_a” and a flag meaning “this is a symlink”.
In this case, file_b would be a symlink pointing to file_a.

2020-06-07