为什么 .. 和父目录之间的链接是硬链接?

为什么 .. 和父目录之间的链接是硬链接?

我刚刚注意到 .. 和父目录之间的链接是硬链接,它们具有相同的 inode 编号:

starpinker@host /home/starpinker/unix $ ls -ail
8200794 drwxrwxr-x 2 starpinker starpinker 4096 Aug 23 11:22 .
1409238 drwxrwxr-x 2 starpinker starpinker 4096 Aug 23 11:22 ..

其中 的 inode 编号为/home/starpinker/unix8200794并且 的 inode 编号/home/starpinker恰好为1409238

我对此有一个疑问:

无法跨不同的文件系统创建硬链接。那么如果父目录和子目录位于不同的文件系统中怎么办?例如,在我的例子中,如果和/home/starpinker位于不同的文件系统中,unix 只是一个挂载点,那么和/home/starpinker/unix之间的链接仍然是硬链接吗?/home/starpinker/unix/../home/starpinker

答案1

为什么是硬链接?因为它指向父目录。还有什么可以如果没有链接的话会怎样?

对于文件系统根目录,..仍然硬链接 – 但它指向目录本身,即它相当于.。内核的 VFS 层(管理挂载点和文件系统)处理这种特殊情况,并神奇地解析/home/starpinker/unix/..为,/home/starpinker而无需实际查看文件系统。

(此外,我还没有研究过这个,但我认为有些文件系统实际上并不保留磁盘上的.链接..,而是呈现模拟的链接。如果 VFS 层实际上对所有链接都这样做,而不仅仅是特殊情况,我不会感到惊讶........)

相关内容