
硬链接、软链接(符号链接)与快捷方式
肥宅水水呀一文吃透:硬链接、软链接(符号链接)与快捷方式
它们“看起来都像指向某个东西”,但工作层级不同、限制不同、删除/移动时的行为也不同。🔗
TL;DR(太长不看:Too Long; Didn't Read) 🧾
- 硬链接(Hard Link):同一个文件的数据块有多个“名字”。仅限文件、仅限同一分区(同一卷)、删除原文件名也不会丢数据。
- 软链接 / 符号链接(Symbolic Link):一个特殊的文件,保存目标路径。可指向文件或目录,可跨分区/磁盘,目标删了就会悬空。
- 快捷方式(.lnk):给人/桌面用的“指路纸条”,不是文件系统级重定向;很多程序不会把它当成目标本体。
mklink /d:创建目录符号链接(目录软链接)。mklink /j:创建目录联接(Junction),只对目录,通常要求本机路径。历史上兼容性好、权限门槛低。
1)三个名词放进同一张图 🎯
| 类型 | 指向对象 | 跨分区 | 删除“源名”的影响 | 常见用途 | 系统层级 |
|---|---|---|---|---|---|
| 硬链接 | 文件 ✅(目录❌) | ❌ | 不会丢数据(还剩的链接都有效) | 给同一文件多个“入口” | 文件系统级 |
| 软链接 / 符号链接 | 文件/目录 ✅ | ✅ | 目标删了→链接“断了” | 类 Unix 的灵活引用 | 文件系统级 |
| 快捷方式(.lnk) | 文件/目录 | ✅ | 目标删了→提示找不到 | 给用户点击的入口 | 壳层(Shell)级 |
直觉记忆:
- 硬链接像“同一本书、放了多本封面”;
- 符号链接像“书架上的提示卡片,写着那本书在哪一层”;
- 快捷方式像“贴在墙上的便签”,只有外壳(资源管理器)认识。
2)Windows 的 mklink 家族 👨👩👧👦
mklink [[/D] | [/H] | [/J]] <Link> <Target> |
- 不带参数:创建文件符号链接(软链接到文件)。
/D:创建目录符号链接(软链接到目录)。/H:创建硬链接(仅文件、同一卷)。/J:创建目录联接(Junction)(仅目录,通常指向本机路径)。
权限提示:较新的 Windows(Win10 1703+)在**打开“开发者模式”**时,普通用户即可创建符号链接;否则需要管理员权限。硬链接/联接一般不需要管理员。
3)mklink /j vs mklink /d 到底差哪儿?🧐
| 维度 | mklink /d(目录符号链接) |
mklink /j(目录联接 / Junction) |
|---|---|---|
| 目标类型 | 目录 | 目录 |
| 实现方式 | 符号链接(reparse point,存路径) | 联接(reparse point,指向本机目录) |
| 跨分区 | ✅ 可以 | ✅ 可以(同为本机不同卷一般可) |
指向网络路径(UNC,如 \\server\share) |
✅ 支持 | ⚠️ 通常不支持/不可靠 |
| 相对路径 | ✅ 友好(可相对) | ❌ 倾向使用绝对本机路径 |
| 断链行为(目标被删/移动) | 链接会“断” | 也会“断” |
| 兼容性与历史包袱 | 旧程序有时对 symlink 不友好;早期需管理员 | 老牌做法,很多 Windows 程序把它当“真目录”看待 |
| 典型用途 | 跨卷或跨机器映射目录;需要相对路径时 | 把一个本机目录“挂载”到另一个路径,追求兼容与稳定 |
经验法则:
- 需要指到网络共享、或想用相对路径:用
/d。 - 想在本机把目录“无感挂载”、追求与老工具/服务兼容:用
/j。
4)和快捷方式(.lnk)的根本区别 📝
.lnk是一个普通文件,主要给资源管理器/桌面使用;命令行工具或程序未必会跟随它。- 符号链接/联接/硬链接属于文件系统级;绝大多数程序对它们是透明的(以为就是目标本体)。
- 迁移/备份时:很多工具会特殊处理 reparse point(链接),而
.lnk只是小文件本身。
5)删除与移动:行为差异 🧨
- 硬链接:多个名字共享同一数据。删掉其中一个名字,只是引用计数–1;直到计数为 0 数据才会真正删除。
- 符号链接(含
/d)/联接(/j):删掉链接本体不影响目标内容;反过来,把目标删了或移走,链接会失效。 - 快捷方式:删掉
.lnk只删便签;目标不受影响。
6)常用命令示例(可直接抄)🧪
:: 1) 文件硬链接(同一卷) |
小技巧:路径中有空格请加引号,比如:
mklink /D "C:\My Projects\cache" "D:\big disk\cache"
7)怎么区分我看到的是哪一种?🔍
-
dir会在名字旁边标注:<SYMLINK>、<SYMLINKD>(目录符号链接)、<JUNCTION>(联接)。 -
查看硬链接数量与列表:
fsutil hardlink list C:\path\to\file.txt
-
PowerShell 也能看:
Get-Item C:\path\to\something | Format-List *link*
8)选择建议(给决策懒人包)✅
- 同一卷内,想给“同一文件多个名字”,而且要保证删一个不影响另一个 → 硬链接。
- 需要指向目录,且可能跨卷/跨机器,或想走相对路径 → 目录符号链接(
/d)。 - 在本机把一个目录“无感挂载”给老软件用 → 目录联接(
/j)。 - 只是桌面上给人点的入口 → 快捷方式
.lnk。
9)常见坑 & 规避 🪤
- 文件系统要求:硬链接/符号链接/联接都要求 NTFS;FAT32 等不支持。
- 权限:没有开发者模式时,创建符号链接可能需要管理员。
- 备份/同步工具:确认是否保留 reparse point,防止被“解引用”成一坨复制品,或被忽略。
- 循环引用:链接到父目录或互相指来指去会让遍历/同步工具陷入递归地狱。
- 网络路径:
/j对 UNC 通常不稳,跨机器请用/d。 - 目录硬链接? Windows 不支持目录硬链接;目录层面只有 符号链接(
/d) 和 联接(/j)。
10)Linux/macOS 对照 🍏🐧
| 需求 | Windows | Linux/macOS |
|---|---|---|
| 文件硬链接 | mklink /H link target |
ln target link |
| 文件软链接 | mklink link target |
ln -s target link |
| 目录软链接 | mklink /D link target |
ln -s target link |
| 目录联接(近似概念) | mklink /J link target |
无直接同名概念(一般用目录软链接替代) |
11)一段最小复现:创建、验证、删除 🧰
:: 目录准备 |
12)FAQ 快速解惑 💬
-
Q:能不能给目录做硬链接?
A:不能。 Windows 不支持目录硬链接;请用/d(目录符号链接)或/j(目录联接)。 -
Q:
/j和/d哪个更“真”?
A:老软件眼里/j更像“真目录”;/d更灵活(相对路径、网络路径)。 -
Q:删掉链接会不会把目标也删了?
A:不会。 删的是“入口”。真正删除数据的是硬链接计数归零或你直接删目标。
评论
匿名评论隐私政策





