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(至少是虚拟的).
通常,符号链接只是文件(顺便说一句,目录也是文件),它们具有:
file-type告诉系统该文件是"符号链接"虚拟文件系统也可以具有符号链接,因此,请检查FUSE或其他一些文件系统实现源.(EXT2/EXT3/ufs..etc)
所以,
答案是UNIX/Linux中的inode吗?
取决于文件系统实现,但是,通常inode包含"文件类型"(以及所有者,访问权限,时间戳,大小,指向数据块的指针).有些文件系统没有inode(在物理实现中)但只有"虚拟inode"来保持与内核的兼容性.
如果是,那么目标和链接的inode编号是否相同?
不.通常,符号链接是具有自己的inode的文件(具有文件类型,自己的数据块等)
如果是,链接inode可以具有与目标的inode(如果存在)不同的权限吗?
这是关于如何处理符号链接文件的.通常,内核不允许更改符号链接权限 - 并且符号链接始终具有默认权限.您可以编写自己的文件系统,允许符号链接的不同权限,但是您会遇到麻烦,因为常见的程序chmod不会更改符号链接本身的权限,所以制作这样的文件系统无论如何都是毫无意义的)
要理解硬链接和符号链接之间的区别,您应该首先了解目录.
目录是文件(由inode中的标志区分)告诉内核"将此文件作为映射file-name到inode_number".硬链接只是映射到它们的文件名inode.所以如果目录文件包含:
file_a: 1000
file_b: 1001
file_c: 1000
Run Code Online (Sandbox Code Playgroud)
上述方法,在此目录中,是3个文件:
这是符号链接的主要区别,其中file_b(inode 1001)的inode可以具有内容 "file_a",而标志意味着"这是符号链接".在这种情况下,file_b将是指向的符号链接file_a.