我刚刚注意到 .. 和父目录之间的链接是硬链接,它们具有相同的 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/unix
,8200794
并且 的 inode 编号/home/starpinker
恰好为1409238
。
我对此有一个疑问:
无法跨不同的文件系统创建硬链接。那么如果父目录和子目录位于不同的文件系统中怎么办?例如,在我的例子中,如果和/home/starpinker
位于不同的文件系统中,unix 只是一个挂载点,那么和/home/starpinker/unix
之间的链接仍然是硬链接吗?/home/starpinker/unix/..
/home/starpinker
答案1
为什么是硬链接?因为它指向父目录。还有什么可以如果没有链接的话会怎样?
对于文件系统根目录,..
是仍然硬链接 – 但它指向目录本身,即它相当于.
。内核的 VFS 层(管理挂载点和文件系统)处理这种特殊情况,并神奇地解析/home/starpinker/unix/..
为,/home/starpinker
而无需实际查看文件系统。
(此外,我还没有研究过这个,但我认为有些文件系统实际上并不保留磁盘上的.
链接..
,而是呈现模拟的链接。如果 VFS 层实际上对所有链接都这样做,而不仅仅是特殊情况,我不会感到惊讶..
......)