摘要:NTFS 文件系统下,有三种特殊链接,Symbolic link、Junction 以及 Hardlink。经查询维基百科,我了解了三者的区别。

2021-07-12:此文有一个错误,NTFS 文件系统是没有 inode 的,这是 Linux 的说法。这部分请参考我的最新文章

文件组织和管理方式

NTFS 系统中,一个文件拥有一个 inode 作为唯一标识,inode 记录了文件的属性和磁盘位置(这些 inode 都放在 MFT - 主文件表中);另外,文件名作为其名字,目录名+文件名组成了唯一路径。

New-Item -Name symlink.docx -Type SymbolicLink -Target .\1213.docx

符号链接,软链接:这个链接文件保存了指向文件路径的字符串。就是说,符号链接指向的并非数据本身,而是名称。当软件访问改链接时,将自动跳转到指向的文件路径。由于依赖文件路径,该链接不会检查文件路径是否真的有文件,当原文件删除时,软链接不可打开。

符号链接可以指向系统可以访问的一切路径。创建 Symbolic Link 需要管理员权限。

New-Item -Name Junction -Type Junction -Target 123

Junction point 类似于 Symbolic Link,只支持目录;关于两者的区别,参见此贴。两者在本地电脑上基本无区别,当通过网络访问另一台电脑时,Junction point 将指向远程电脑的目录,而 Symbolic Link 将指向本地目录(这在大多数情况下是禁止的和不可执行的)。

如果需要创建目录链接,使用 Junction,如果需要创建文件链接,使用 Symbolic Link。

New-Item -Name Hadlink.docx -Type HardLink -Target .\1213.docx

硬链接指向文件的唯一标志符号,可以理解为指向数据本身。我们指定的 Target 是其用来找到 inode 的途径。因此,他指向的目标必须存在。并且,只能在同一个硬盘中使用。

为什么不允许创建指向目录的硬链接:

  1. 由于目录文件,本身是一个文件,占有一个 inode。若允许指向目录的硬链接,当子目录指向父目录时,会形成循环,倘若系统遍历该目录,将无法走出该循环,因为无法识别到底谁是父目录。而软链接之所以不会出现这个问题,是因为软链接并非指向文件本身的真实文件,可以被系统跳过。
  2. 倘若允许指向目录的硬链接,当从该目录回到父目录时,系统无法决定究竟是回到链接文件所在的父目录的父目录,还是指向目录所在父目录的子目录。

From Wikipedia

硬链接是系统备份文件的工作方式,当源文件删除时,硬链接文件依然可用。

三者区别表格

外部链接

  1. WIki 符号链接
  2. NTFS 符号链接
  3. Wiki inode
  4. Hark link