UNIX / Linux系统如何在内部管理符号链接。众所周知,即使没有实际的目标文件也可能存在符号链接(悬挂链接)。那么在内部代表符号链接的是什么。
在Windows中,答案是reparse point。
reparse point
问题:
答案inode在UNIX / Linux中吗?
inode
如果是,那么目标和链接的索引节点号是否相同?
如果是,链接inode可以具有与目标inode不同的权限(如果存在)吗?
它不是关于UNIX / Linux,而是关于文件系统的实现-但是,是的,Unix / Linux在内核级别使用inode,而文件系统的实现则具有inode(至少是虚拟的inode)。
通常,符号链接只是文件(顺便说一句,目录也是文件),它们具有:
file-type
虚拟文件系统也可以具有符号链接,因此,请检查FUSE或其他文件系统实现源。(ext2 / ext3 / ufs..etc)
所以,
答案是UNIX / Linux中的inode吗?
取决于文件系统的实现,但是可以,通常inode包含“文件类型”(以及所有者,访问权限,时间戳,大小,数据块的指针)。有些文件系统没有inode(在物理实现中),但是只有“虚拟inode”用于维护与内核的兼容性。
没有 。通常,符号链接是一个具有自己的索引节点的文件(具有文件类型,自身的数据块等)。
这是关于 如何 处理符号链接文件的。通常,内核不允许更改符号链接权限- 符号链接始终具有默认权限。您可以编写自己的文件系统,以允许对符号链接使用不同的权限,但是您会遇到麻烦,因为像chmod这样的通用程序不会自行更改符号链接的权限,因此制作这样的文件系统将毫无意义。
chmod
要了解硬链接和符号链接之间的区别,您应该首先了解目录。
目录是告诉内核,“处理这个文件作为地图文件(通过在inode的标志区分)file- name来inode_number”。硬链接只是映射到same的文件名inode。因此,如果目录文件包含:
file- name
inode_number
file_a: 1000 file_b: 1001 file_c: 1000
上面的意思是在这个目录中有3个文件:
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.
file_b
file_a