Windows 的 NTFS 文件系统提供三种链接:
- 硬链接(Hard Link)
- 目录联接(Junction)
- 符号链接(Symbolic Link)
下面从原理、特性、命令与场景逐一说明。
硬链接(Hard Link)
原理
多个文件名(目录项)指向同一个文件数据块(同一 MFT 记录),互为“别名”,无主从之分。
- 本质:同一份数据,多个入口。
- 引用计数:每建一个硬链接计数+1;删一个计数-1;计数为0才真正删除数据。
核心特性
- ✅ 仅适用于文件,不能用于目录。
- ✅ 必须在同一分区/同一卷(不可跨盘、不可跨网络)。
- ✅ 不占额外磁盘空间(仅新增目录项)。
- ✅ 删除原始文件不影响其他硬链接,仍可正常访问。
- ✅ 修改任一硬链接,所有链接看到的内容同步变化。
- ✅ 普通用户即可创建(无需管理员)。
创建命令(cmd)
# mklink /h 链接路径 目标文件
mklink /h D:\file_link.txt C:\data\original.txt
典型用途
- 文件备份、多副本共享(节省空间)。
- 日志轮转、配置文件多路径访问。
目录联接(Junction,也叫 Junction Point)
原理
仅针对目录的“早期软链接”,NTFS 重解析点(Reparse Point)的一种,存储目标目录的绝对路径。
- 设计初衷:解决旧系统无法跨目录访问的问题(如 Win2000)。
核心特性
- ✅ 仅适用于目录,不能用于文件。
- ✅ 支持跨分区/跨盘符(可指向本地其他盘或网络共享)。
- ✅ 占用极小空间(仅重解析点元数据)。
- ✅ 目标删除/移动后,链接失效(访问报错)。
- ✅ 路径解析:自动补全绝对路径,不支持相对路径。
- ✅ 需要管理员权限创建。
创建命令(cmd)
# mklink /j 链接目录 目标目录
mklink /j D:\junction_dir C:\data\target_dir
典型用途
- 迁移系统目录(如 User、ProgramData)到其他盘,不影响系统路径。
- 合并多个目录内容到一个入口(类似“挂载”)。
符号链接(Symbolic Link,Soft Link)
原理
增强版软链接(Vista 及以后),同样是 NTFS 重解析点,存储目标路径(支持相对/绝对)。
- 可视为目录联接的超集:既支持文件,也支持目录;支持相对路径。
核心特性
- ✅ 适用于文件或目录。
- ✅ 支持跨分区、跨盘符、跨网络(UNC 路径)。
- ✅ 支持相对路径(链接与目标相对位置不变时,移动链接目录仍有效)。
- ✅ 占用极小空间(同 Junction)。
- ✅ 目标删除/移动后,链接失效(文件链接打不开,目录链接访问报错)。
- ✅ 默认需要管理员权限(可通过组策略放开普通用户创建权限)。
创建命令(cmd)
# 文件符号链接(默认)
mklink D:\symlink_file.txt C:\data\original.txt
# 目录符号链接(/D)
mklink /D D:\symlink_dir C:\data\target_dir
典型用途
- 灵活路径映射(如开发环境多版本切换)。
- 迁移单个文件/目录到其他位置,保持原路径访问。
- 网络共享路径本地别名化。
三种链接 + 快捷方式 对比表
| 特性 | 硬链接(Hard Link) | 目录联接(Junction) | 符号链接(Symbolic) | 快捷方式(.lnk) |
|---|---|---|---|---|
| 适用对象 | 仅文件 | 仅目录 | 文件/目录 | 文件/目录 |
| 跨分区 | ❌ 否 | ✅ 是 | ✅ 是 | ✅ 是 |
| 相对路径 | ❌ 不支持 | ❌ 不支持 | ✅ 支持 | ❌ 不支持 |
| 目标删除后 | 仍可用 | 失效 | 失效 | 失效 |
| 额外空间 | 无 | 极小 | 极小 | 几百字节 |
| 管理员权限 | ❌ 不需要 | ✅ 需要 | ✅ 默认需要 | ❌ 不需要 |
| 文件系统 | NTFS | NTFS | NTFS | 全支持(FAT32/NTFS) |
常见误区澄清
硬链接不能跨目录?
可以跨目录,但必须同分区。例如 C:\a.txt 硬链接到 C:\sub\b.txt 是允许的。目录联接 = 符号链接(目录)?
不等同:Junction 强制绝对路径、仅目录;Symbolic(目录)支持相对路径、功能更强、兼容性略差(部分旧软件不认)。快捷方式 = 符号链接?
完全不同:.lnk 是资源管理器层的快捷方式(双击才解析);符号链接是文件系统层的链接(内核直接解析,所有程序都生效)。
如何选择?
- 同分区文件共享、防误删 → 硬链接。
- 旧系统兼容、仅目录跨盘 → 目录联接。
- 灵活路径、相对路径、文件/目录通用 → 符号链接。
- 仅桌面/资源管理器快捷访问 → 快捷方式。
查看是哪个链接
启动 PowerShel,执行下面命令:
Get-ChildItem -Force | Select-Object Name, LinkType
显示如下:
Name LinkType
---- --------
analysis.py HardLink
common.py HardLink
config.py HardLink
cpython-3.11-windows-x86_64-none Junction
查看文件硬连接
查看同一个文件有几个链接别名
fsutil hardlink list analysis.py