符号链接背后有什么?

Ara*_*ind 18 unix linux symlink inode linux-kernel

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

在Windows中,答案是答案reparse point.

问题:

答案是inode在UNIX/Linux中吗?

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

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

jm6*_*666 20

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

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

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

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

所以,

答案是UNIX/Linux中的inode吗?

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

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

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

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

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

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

目录是文件(由inode中的标志区分)告诉内核"将此文件作为映射file-nameinode_number".硬链接只是映射到它们的文件名inode.所以如果目录文件包含:

file_a: 1000
file_b: 1001
file_c: 1000
Run Code Online (Sandbox Code Playgroud)

上述方法,在此目录中,是3个文件:

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

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