windows 硬链接(Hard Link)、目录联接(Junction)、符号链接(Symbolic Link) 详细介绍 作者:马育民 • 2026-05-05 14:36 • 阅读:10000 Windows 的 NTFS 文件系统提供三种链接: - **硬链接(Hard Link)** - **目录联接(Junction)** - **符号链接(Symbolic Link)** 下面从原理、特性、命令与场景逐一说明。 --- # 硬链接(Hard Link) ### 原理 多个文件名(目录项)**指向同一个文件数据块(同一 MFT 记录)**,互为“别名”,**无主从之分**。 - 本质:同一份数据,多个入口。 - 引用计数:每建一个硬链接计数+1;删一个计数-1;**计数为0才真正删除数据**。 ### 核心特性 - ✅ 仅适用于**文件**,**不能用于目录**。 - ✅ 必须在**同一分区/同一卷**(不可跨盘、不可跨网络)。 - ✅ 不占额外磁盘空间(仅新增目录项)。 - ✅ **删除原始文件不影响其他硬链接**,仍可正常访问。 - ✅ 修改任一硬链接,所有链接看到的内容同步变化。 - ✅ 普通用户即可创建(无需管理员)。 ### 创建命令(cmd) ```bash # mklink /h 链接路径 目标文件 mklink /h D:\file_link.txt C:\data\original.txt ``` ### 典型用途 - 文件备份、多副本共享(节省空间)。 - 日志轮转、配置文件多路径访问。 --- # 目录联接(Junction,也叫 Junction Point) ### 原理 **仅针对目录**的“早期软链接”,NTFS 重解析点(Reparse Point)的一种,**存储目标目录的绝对路径**。 - 设计初衷:解决旧系统无法跨目录访问的问题(如 Win2000)。 ### 核心特性 - ✅ 仅适用于**目录**,**不能用于文件**。 - ✅ **支持跨分区/跨盘符**(可指向本地其他盘或网络共享)。 - ✅ 占用极小空间(仅重解析点元数据)。 - ✅ **目标删除/移动后,链接失效**(访问报错)。 - ✅ 路径解析:**自动补全绝对路径**,不支持相对路径。 - ✅ **需要管理员权限**创建。 ### 创建命令(cmd) ```bash # mklink /j 链接目录 目标目录 mklink /j D:\junction_dir C:\data\target_dir ``` ### 典型用途 - 迁移系统目录(如 User、ProgramData)到其他盘,不影响系统路径。 - 合并多个目录内容到一个入口(类似“挂载”)。 --- # 符号链接(Symbolic Link,Soft Link) ### 原理 **增强版软链接**(Vista 及以后),同样是 NTFS 重解析点,**存储目标路径(支持相对/绝对)**。 - 可视为**目录联接的超集**:既支持文件,也支持目录;支持相对路径。 ### 核心特性 - ✅ 适用于**文件或目录**。 - ✅ **支持跨分区、跨盘符、跨网络(UNC 路径)**。 - ✅ 支持**相对路径**(链接与目标相对位置不变时,移动链接目录仍有效)。 - ✅ 占用极小空间(同 Junction)。 - ✅ **目标删除/移动后,链接失效**(文件链接打不开,目录链接访问报错)。 - ✅ **默认需要管理员权限**(可通过组策略放开普通用户创建权限)。 ### 创建命令(cmd) ```bash # 文件符号链接(默认) 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) | --- # 常见误区澄清 1. **硬链接不能跨目录?** 可以跨目录,**但必须同分区**。例如 C:\a.txt 硬链接到 C:\sub\b.txt 是允许的。 2. **目录联接 = 符号链接(目录)?** 不等同:Junction **强制绝对路径**、**仅目录**;Symbolic(目录)**支持相对路径**、功能更强、兼容性略差(部分旧软件不认)。 3. **快捷方式 = 符号链接?** 完全不同:.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 ``` 原文出处:http://www.malaoshi.top/show_1GW3Fv41RK3C.html