这不是关于 UNIX/Linux 而是关于文件系统实现 - 但是,是的,Unix/Linux 在内核级别使用 inode,而文件系统实现具有 inode(至少是虚拟的)。
一般来说,符号链接只是文件(顺便说一句,目录也是文件),它具有:
-
标志“inode”中的
file-type 告诉系统该文件是“符号链接”
- file-content:目标的路径 - 换句话说:符号链接只是一个文件,其中包含一个文件名和 inode 中的标志。
虚拟文件系统也可以有符号链接,因此,请检查 FUSE 或其他一些文件系统实现源。 (ext2/ext3/ufs..等)
所以,
答案是 UNIX/Linux 中的 inode 吗?
取决于文件系统实现,但是是的,通常 inode 包含“文件类型”(以及所有者、访问权限、时间戳、大小、指向数据块的指针)。有些文件系统没有inodes(在物理实现中),但只有“虚拟inode”来保持与内核的兼容性。
如果是,那么目标和链接的 inode 编号是否相同?
否。通常,符号链接是一个带有自己的 inode 的文件,(带有文件类型、自己的数据块等)
如果是,链接inode是否可以拥有与目标不同的权限?
inode(如果存在的话)?
这是关于如何处理符号链接文件的。通常,内核不允许更改符号链接权限 - 符号链接始终具有默认权限。你可以编写自己的文件系统来允许符号链接的不同权限,但你会遇到麻烦,因为像chmod 这样的普通程序不会更改符号链接本身的权限,所以无论如何制作这样的文件系统毫无意义)
要了解硬链接和符号链接之间的区别,您应该首先了解目录。
目录是告诉内核“将此文件作为file-name 到inode_number 的映射处理”的文件(由inode 中的标志区分)。硬链接只是映射到相同inode 的文件名。所以如果目录文件包含:
file_a: 1000
file_b: 1001
file_c: 1000
上面的意思是,在这个目录下,有3个文件:
- inode 1000 描述的file_a
- file_b 由 inode 1001 和
描述
- file_c 再次由 inode 1000 描述(因此它是 with file_a 的硬链接,而不是 to file_a 的硬链接 - 因为无法分辨哪个文件名在前 - 它们相同)。
这是符号链接的主要区别,其中file_b(inode 1001)的 inode 可以具有 content“file_a”和一个表示“这是一个符号链接”的标志。在这种情况下,file_b 将是指向file_a 的符号链接。