答案1
NTFS 数据文件的所有属性都存储为带有 ID 的“inode”,文件名指向该 inode。所有文件都有一个硬链接。某些工具可以创建指向同一 inode 的额外名称(硬链接),该 inode 有一个指向它的名称数量的计数器。如果该数字变为零,则操作系统会删除该文件,即 inode。
特殊工具(如 LN)可以使用指向现有 inode 的文件名创建指向现有 inode 的附加文件名。请注意,所有文件属性(包括日期和时间)都与 inode 一起存储,而不是文件名。
当您希望不同的名称指向相同的数据(读取或写入)时,(额外)硬链接非常有用。它们节省空间和开销。但是,它们会破坏假定不同名称指向不同数据的程序。例如,如果您用指向单个文件的硬链接替换对重复文件的引用,那么您就删除了所有备份!Windows 操作系统是一个假定不同名称指向不同位集的程序。
硬链接必须位于同一物理和逻辑卷上。
它们可用于:
由于 Windows 仅支持 256 个字符左右,因此减少路径长度。
减少重复数据文件的存储空间 - 例如,您可以对具有多个完整目录树的分区进行多次备份,但对于自上次备份以来未发生更改的文件,则使用硬链接。
连接点比较混乱,并使用重解析点(我不明白)。它们可以指向不同的物理或逻辑卷,但它们必须位于同一台计算机上。它们显然可以像目录的符号链接一样使用,允许同一目的地使用第二个名称,但仅限于一台计算机,而不仅仅是一个卷。
有助于减少路径长度,或简化使用硬编码目录名的多个程序的工作。
同样的警告!许多程序假设不同的名称 = 不同的文件。
然后有符号链接(可以跨网络)、快捷方式和 PIF 等等......
基本上,他们说只对同一卷(磁盘驱动器号)内的文件使用硬链接,并且只对同一台计算机上的目录使用连接点(它们可以跨越不同的本地卷)。
答案2
快速定义:
符号链接:指向同一或不同卷(驱动器号)上的文件或目录的链接,甚至指向远程文件或目录(在其路径中使用 UNC)的链接。
硬链接:仅指向同一卷(驱动器号)上的文件的链接。每个文件(文件的数据)至少有一个硬链接(文件的名称)。删除所有硬链接实际上会删除该文件。
连接点:指向同一或不同卷(驱动器号)上的目录的链接,但不指向远程目录。
细节:
假设您正在使用 Windows Vista/7 中的 NTFS 卷,则可以使用命令行工具 MKLINK
创建所有三种类型的链接:
MKLINK [[/D] | [/H] | [/J]] Link Target /D Creates a directory symbolic link. Default is a file symbolic link. /H Creates a hard link instead of a symbolic link. /J Creates a Directory Junction. Link specifies the new symbolic link name. Target specifies the path (relative or absolute) that the new link refers to.
符号链接:符号链接是指向另一个文件系统对象(例如:文件/目录)的文件系统对象。
MKLINK
可用于创建符号链接。使用参数/D
创建目录符号链接。MKLINK 不会检查目标是文件还是目录,甚至不会检查目标是否存在!这意味着您可能会创建无效链接,例如指向文件的目录符号链接或指向不存在的文件/目录的符号链接。符号链接可以是绝对链接,也可以是相对链接。绝对链接是指定路径名的每个部分的链接,而相对链接是相对于指定路径中相对链接说明符的位置确定的。
绝对符号链接可以指向同一卷或不同卷上的文件/目录,也可以使用 UNC 路径指向远程文件或目录。但是,相对符号链接仅限于单个卷。
创建符号链接需要提升的权限,但一旦创建,则无需提升的权限即可删除该链接。
硬链接:硬链接是文件系统的表示,通过该表示,多个路径可以引用单个文件。
MKLINK
允许/H
仅创建文件(而非目录)的硬链接(使用参数)。只能创建同一卷中的文件的硬链接。具有多个硬链接的文件只有在所有硬链接被删除(即链接数达到零)时才会被真正删除。因此,实际上您创建的每个文件都至少有一个硬链接,无论您是否使用
MKLINK
。对该文件的任何更改都会立即被通过引用该文件的硬链接访问它的应用程序看到。但是,目录条目大小和属性信息只会针对进行更改的链接进行更新。
请注意,文件的属性会反映在指向该文件的每个硬链接中,对该文件属性的更改会传播到所有硬链接。例如,如果您取消设置硬链接的只读属性以删除该特定硬链接,并且实际文件有多个硬链接,则您需要从剩余硬链接之一重新设置文件的只读属性,以使文件和所有剩余硬链接恢复为只读状态。
连接点:连接点(也称为软链接)与硬链接的不同之处在于,它引用的存储对象是单独的目录,并且连接点可以链接位于同一台计算机上不同本地卷上的目录。除此之外,连接点的操作与硬链接相同。连接点通过重新解析点实现。
MKLINK
允许创建/J
目录(甚至是文件)的连接点(使用参数),尽管这可能被视为无效链接。连接点可以看作是指向目录的符号链接的硬链接等价物。连接点链接不能创建到远程目录,但可以创建到相同/不同卷上的目录。
参考:
[1] 硬链接和连接点:https://docs.microsoft.com/en-gb/windows/win32/fileio/hard-links-and-junctions
[2]创建符号链接:https://docs.microsoft.com/en-gb/windows/win32/fileio/creating-symbolic-links
答案3
硬链接:仅适用于文件
连接点:仅适用于文件夹
象征性的:本地卷或 UNC 路径
特征 | 文件硬链接 | 目录连接 | 符号链接 |
---|---|---|---|
处理文件 | ⚠️仅限文件 | ❌不 | ✅是的 |
适用于文件夹 | ❌不 | ⚠️仅限文件夹 | ✅是的 |
相同音量 | ✅ 是的 | ✅是的 | ✅是的 |
音量不同 | ❌不 | ✅是的 | ✅是的 |
UNC 路径 | ❌不 | ❌不 | ✅是的 |
标准用户 | ✅是的1 | ✅是的 | ⚠️仅限管理员 |
- 1你需要写入属性您要添加硬链接的文件的权限。
关于 HardLinks
最好将添加硬链接视为:
添加附加文件名
所有文件都有一个文件名,但您并不限于只有一个。您可以添加其他文件名。每个文件名都与任何其他文件名一样真实。
换句话说:所有文件是硬链接。它们的链接数为1。
如果我创建一个文件:
╔═══════════════╗
║ Hello, world! ║
╚═══════════════╝
现在我们给文件命名:
╔═══════════════╗
C:\Temp\Test.txt ──────>║ Hello, world! ║
╚═══════════════╝
现在我们可以向文件添加第二个名称:
mklink /H C:\Users\Frob.csproj C:\Temp\Test.txt
╔═══════════════╗
C:\Users\Frob.csproj───>║ Hello, world! ║
╚═══════════════╝
^
└C:\Temp\Test.txt
- 您不能说一个文件名比另一个文件名更真实。
- 您不能说一个文件名是链接,而另一个不是。
- 该文件确实有两个名字。
您可以删除其中一个文件名,只留下剩余的文件名:
╔═══════════════╗
C:\Users\Frob.csproj───>║ Hello, world! ║
╚═══════════════╝
并且文件仍然存在。只要至少有一个链接指向它,内容就会继续存在。一旦删除最后一个链接:文件系统就会删除内容。
奖金聊天
Windows 为 AppCompat 目的创建连接和符号链接;对于那些认为以下情况的编写不佳的应用程序:
- C:\用户\所有用户
- C:\用户\默认用户
是有效的。
C:\Users>dir /as
Directory of C:\Users
04/11/2018 07:45 PM <SYMLINKD> All Users [C:\ProgramData]
04/11/2018 07:45 PM <JUNCTION> Default User [C:\Users\Default]
对于期望 Windows XP 时代文件夹仍然存在的应用程序,用户的配置文件夹也是如此:
文件夹 | 类型 | 目标 |
---|---|---|
应用数据 | <路口> | C:\用户\Ian\AppData\Roaming |
饼干 | <路口> | C:\Users\Ian\AppData\Local\Microsoft\Windows\INetCookies |
本地设置 | <路口> | C:\用户\Ian\AppData\Local |
我的文件 | <路口> | C:\用户\Ian\文档 |
网屋 | <路口> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
印刷机 | <路口> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Printer 快捷方式 |
最近的 | <路口> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Recent |
发给 | <路口> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\SendTo |
开始菜单 | <路口> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\开始菜单 |
模板 | <路口> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Templates |
答案4
硬链接只是文件的另一个名称。如果您有一个名为 A.txt 的文件,并且有链接 L.txt,则一旦删除 A.txt,您仍可以通过 L.txt 访问其数据。只有当两者都被删除时,文件才会消失。
另一方面,您有一个所谓的软链接(如果是文件夹,则为连接点;如果是文件,则为符号链接)。在这种情况下,当您删除 A.txt 时,文件实际上已经消失了。删除 L.txt 对文件没有任何影响。
硬链接只能在与原始文件相同的分区上使用,而软链接可以跨分区使用。
PS 就 NTFS 而言,文件和文件夹大多可以互换。