系统相关
首页 > 系统相关> > linux – 符号链接背后有什么?

linux – 符号链接背后有什么?

作者:互联网

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

在Windows中,答案是重新分析点.

问题:

答案是UNIX / Linux中的inode吗?

如果是,那么目标和链接的inode编号是否相同?

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

解决方法:

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

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

>“inode”中的标志文件类型,告诉系统该文件是“符号链接”
> file-content:目标的路径 – 换句话说:符号链接只是一个文件,其中包含inode中带有标志的文件名.

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

所以,

Is the answer an inode in UNIX/Linux?

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

If yes, then will the inode number be same for target and links?

通常,符号链接是一个具有自己的inode的文件(带有文件类型,自己的数据块等)

If yes, can the link inode can have permissions different from that of target’s
inode(if one exists)?

这是关于如何处理符号链接文件的.通常,内核不允许更改符号链接权限 – 并且符号链接始终具有默认权限.您可以编写自己的文件系统,允许符号链接的不同权限,但是您会遇到麻烦,因为像chmod这样的常见程序本身不会更改符号链接的权限,因此无论如何制作这样的文件系统都是毫无意义的)

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

目录是文件(由inode中的标志区分)告诉内核“将此文件作为文件名映射到inode_number”.硬链接只是映射到同一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的硬链接 – 因为无法确定哪个文件名首先出现 – 它们是相同的).

这是符号链接的主要区别,其中file_b(inode 1001)的inode可以包含内容“file_a”,而标志意味着“这是符号链接”.在这种情况下,file_b将是指向file_a的符号链接.

标签:inode,linux,unix,linux-kernel,symlink
来源: https://codeday.me/bug/20191001/1837347.html