windows 硬链接(Hard Link)、目录联接(Junction)、符号链接(Symbolic Link) 详细介绍

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)

常见误区澄清

  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

原文出处:/show_1GW3Fv41RK3C.html