Windows 中的硬链接、目录联接(软链接)、符号链接、快捷方式
在Linux文件系统中经常提及硬链接(Hard Link)和符号链接(Symbolic Link),Windows中也可以创建链接,但由于丰富的图形界面操作,很少提及链接。Windows 的 NTFS 文件系统支持三种链接:硬链接(Hard Link)、符号链接(Symbolic Link)和目录链接(junction point),此外还有一个大家非常熟悉链接机制:快捷方式。
创建链接
创建链接可以通过 dos 命令 mklink 或者 powershell 中的New-Item 创建。
mklink命令的使用说明如下图所示。默认是创建文件符号链接,使用/D 参数则是创建目录的符号链接,使用 /H 是创建硬链接,使用/J是创建目录联结,也称为软链接(soft link)。

使用 powershell 创建链接的方式如下:
New-Item <链接路径> -ItemType <链接类型> -Target <链接目标>
其中 ItemType 的取值可选:HardLink、SymbolicLink、Junction
几种链接的区别
与 Linux 的文件系统中的 inode 与 block 类似,在 NTFS 文件系统中数据对象也赋予了独一无二的文件 ID 以及与之对应的文件路径,文件路径和文件 ID 对应,文件 ID 和数据对象绑定,最终才呈现为可供用户打开、编辑的文件。
快捷方式(shortcut)
快捷方式以.lnk文件方式存在,文件大小仅有几百字节,与原始文件大小无关。适用于 Explorer 等应用程序,并非 NTFS 内置机制,从Win95开始得到支持。FAT32也支持。适用于文件、目录,只能使用绝对路径。可以跨盘符,可以跨主机,可以使用UNC路径、网络驱动器。
符号链接
符号链接是将自己链接到一个目标文件或目录的路径上。当系统识别到符号链接时,它会跳转到符号链接所指向的目标中去,而不改变此时的文件路径。

符号链接从Vista开始得到支持,NTFS内置机制。适用于文件,目录。可以理解为另一种形式的快捷方式(shortcut),文件大小为0字节和不占用空间。可以使用相对/绝对路径,可以跨盘符,跨主机,可以使用UNC路径和网络驱动器。
硬链接
硬链接和符号链接的原理完全不同,符号链接是指向目标路径的链接,而硬链接则是指向目标数据对象的链接。因为一个卷中的数据对象都有一个独一无二文件 ID,也可以说硬链接是指向目标文件 ID 的链接。

硬链接从Windows NT4开始得到支持,是NTFS内置机制,FAT32不支持。只适用于文件,只能使用绝对路径。本身无文件,不占用额外空间。hardlink与targetfile必须位于同一卷,可以简单理解成不能跨盘符。
目录联接
目录联接从Windows2000/XP开始得到支持,是NTFS内置机制。只适用于目录。只能使用绝对路径。目录链接通过重分析点实现,目录链接可以跨卷,但是不能跨主机。
详细对比
几种链接方式详细比较如下表所示
| shortcut | hard link | junction point | symbolic link | |
|---|---|---|---|---|
| 创建方式 | 右键 -> 创建快捷方式 | mklink /H Link Target | mklink /J Link Target | mklink /D Link Target |
| 存在方式 | 以.lnk文件方式存在,适用于Explorer等应用程序。非NTFS内置机制,从Win95开始得到支持。FAT32支持。 | NTFS内置机制,从Windows NT4开始得到支持。FAT32不支持。 | NTFS内置机制,从Windows2000/XP开始得到支持。是 NTFS 3.0 及以上文件系统(Windows 2000 及以上系统)的特性,它是链接本地目录(可跨卷)的访问点,通过交接点的操作都会被系统映射到实际的目录上。通过建立交接点,可以在保证一个目录实例(目录的一致性)的前提下,允许用户或程序从本地文件系统中的多个位置访问此目录。 | NTFS内置机制,从Vista开始得到支持。文件类型是.SYMLINK |
| 适用范围 | 同时适用于文件、目录,只能使用绝对路径。 | 只适用于文件,只能使用绝对路径。 | 只适用于目录。只能使用绝对路径。即使创建junction point时使用了相对路径,保存到NTFS中时将隐式转换成绝对路径。 | 同时适用于文件、目录。这是一种超级shortcut,文件大小为0字节和不占用空间。 |
| 使用限制 | 可以跨盘符,可以跨主机,可以使用UNC路径、网络驱动器。 | hard link与targetfile必须位于同一volume,可以简单理解成不能跨盘符。 | junction point必须与target directory位于同一local computer,可以简单理解成不能跨主机, 在local computer范围内,可以跨盘符。不能使用UNC路径;假设Z是通过网络映射生成的盘符,同样不适用于Z。 | 可以使用相对、绝对路径。假设创建symbolic link时使用了相对路径,保存到NTFS中的就是相对路径,不会隐式转换成绝对路径。可以跨盘符,可以跨主机,可以使用UNC路径、网络驱动器。 |
| 移动能力 | 本身有文件,可以复制,移动等操作。 | / | / | / |
| 文件 | 文件大小仅有几百字节, 跟原文件大小无关,文件类型是.lnk。 | 本身无文件,为文件创建多入口。由于不同的文件指向的是同样的数据,所以无论给同一个文件创建多少个硬链接,他们占整个卷的数据大小都是一样的。 | 对交接点内文件和子目录的“建立、删除、修改”等操作都被映射到对应的目录中的文件和子目录上,对交接点的“复制、粘贴、剪切、配置 ACL”,只会影响此交接点,在同一卷内移动交接点,只会影响此交接点,但在不同卷间移动交接点,会将此交接点转换为正常目录,并且交接点对应目录下的所有内容都会被移动。 | 符号链接(Symlink,Softlink)是对文件或目录的引用,实际上符号链接本身是一个“记录着所引用文件或目录的绝对或相对路径”的特殊文件,通过符号链接的操作都会被重定向到目标文件或目录。对符号链接和快捷方式的“读、写、遍历”等操作都会被重定向到目标文件或目录,但对它们的“复制、删除、移动、配置 ACL”等操作只针对自身。 |
| 关联 | 删除shortcut,不影响target。 | 在Explorer中删除hard link,不影响targetfile。删除target file,不影响hardlink。事实上由于hard link的语义,此时剩下的hardlink就是原始数据的唯一访问点。只有当一个文件 ID 对应的所有硬链接被删除时,数据才真正被标记为删除。 | 删除target directory,junction point仍将存在,但失效了,变得不可用。这个很好理解,因为此时junction point指向不存在的目录。 | 在Explorer中删除symboliclink,不影响target。删除target,symboliclink仍将存在,但失效了,变得不可用。它们可以像普通文件一样操作,但所有对符号链接的操作都实际作用于目标对象。符号链接对用户而言是透明的,符号链接看上去和普通的文件和文件夹没有区别,操作方法也一模一样(更类似于 Linux 的软链接)。 |
链接的应用
- 硬链接:可以在不复制文件的情况下,实现文件的快速访问以及文件的备份,还可以防止重要文件误删,因为删除的是文件的链接,而非文件数据本身。
- 符号链接:可以把一个路径映射到另一个路径,或者指向远程文件或目录,甚至可以通过网络连接到其他计算机上的文件。
- 目录联接:实现路径重定向,当访问链接目录时,系统会自动重定向到实际目录,例如:Vista的"C:\Documents and Settings"是指向"C:\Users"的junctionpoint,这样一些使用了硬编码"C:\Documents and Settings"的老程序可以在Vista上正常工作。此外,还可以解决Windows文件路径长度限制带来的问题(从 Windows 10 版本 1607 开始,可以通过设置注册表以及应用程序清单启用长路径)。
参考
- https://learn.microsoft.com/zh-cn/windows/win32/fileio/hard-links-and-junctions
- https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-item?view=powershell-7.4
- https://learn.microsoft.com/zh-cn/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-version-1607-and-later
Windows 中的硬链接、目录联接(软链接)、符号链接、快捷方式的更多相关文章
- Windows中的硬链接和软链接(hard link 和 Symbolic link)
先来了解一下Linux中的硬链接和软链接: Linux中的硬链接和软链接 Windows中的硬链接和软链接: 硬链接 从Windows NT4开始,NTFS文件系统引入了HardLink这个概念,它让 ...
- 关于Windows中的硬链接
https://zhidao.baidu.com/question/748233720330351012.html linux中使用硬链接 ln a.txt b.txt 查看硬链接 ls -il 关于 ...
- WINDOWS 的 MKLINK : 硬链接,符号链接 : 文件符号链接, 目录符号链接 : 目录联接
玩转WIN7的MKLINK 引言: 换了新电脑,终于再次使用上啦WIN7 ,经过一个周每天重装N次系统,... ... ... ... 在xp系统下,junction命令要用微软开发的小程序 junc ...
- 『学了就忘』Linux基础命令 — 22、Linux中的硬链接和软链接
目录 1.文件和目录的基本存储 2.In命令介绍 (1)我们来看看ln命令的基本信息 (2)ln命令的基本格式 3.创建硬链接 (1)如何创建硬链接 (2)硬链接特征 (3)硬连接原理 4.创建软链接 ...
- Linux中的硬链接和软链接
软链接和硬链接 命令ln ln是创建链接的命令: 创建硬链接:ln file link 创建软链接:ln -s file link 硬链接 硬链接(hard link)是Unix系统最早的创建链接的方 ...
- linux系统中的硬链接和软链接
首先我们需要了解linux下硬链接以及软连接的基本概念.硬链接:新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用.软链接:也称为符号链接,新建的文件以“路径”的形式来表示另 ...
- Windows硬链接 软链接 符号链接 快捷方式
http://blog.nsfocus.net/shortcuthard-linkjunction-pointsymbolic-link/ Windows支持4种”链接”机制,分别是shortcut. ...
- Linux中的硬链接和软链接的概念、区别及用法
概念: 硬链接(hard link): A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指 ...
- linux中的硬链接和软链接是什么
Linux 文件系统最重要的特点之一是它的文件链接.链接是对文件的引用,这样您可以让文件在文件系统中多处被看到.不过,在 Linux 中,链接可以如同原始文件一样来对待.链接可以与普通的文件一样被执行 ...
- Linux中的硬链接和软连接
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...
随机推荐
- hive测试数据洗刷
hive测试--HIVE数据分析 测试使用虚拟机中的hive 环境:虚拟机+jdk+hadoop+hive+mysql 题目: 1.数据导入: 要求将样表文件中的(sales_sample_20 ...
- 【Java】PDF模板生成PDF文档
一.需求背景 客户要求一份文书,文书内容有一些表单项,例如: 1.基本的是和否 (单选框或复选框) 2.备注内容(纯文本信息) 3.单位,机构组织,人员,字典项(下拉选择) 4.用户数字签名(图片信息 ...
- 大语言模型(LLM)运行报错:module ‘streamlit‘ has no attribute ‘chat_message‘
参考: https://blog.csdn.net/weixin_45748921/article/details/134645308 问题在于版本不匹配,深究一下为什么各个版本软件不匹配,发现原因是 ...
- 一个好主板对CPU超频的现实意义————一次超频经历 (z390ws华硕工作站主板+i7-9700k CPU ,Ubuntu18.04.5系统,8核心超频 5.2Ghz以上,单核心满负荷运转可以稳定运行10多分钟后才重启)
本人于今年2020年1月份在某宝上购买了一款workstation主板,也就是工作站主板,传说中的华硕Z390WS主板(购入价格为3900元),由于当时手里有些小钱,又弄了一个大蝴蝶1350w的电源( ...
- 【转载】 模仿学习:在线模仿学习与离线模仿学习 ———— Imitate with Caution: Offline and Online Imitation
网上闲逛找到的一篇文章,介绍模仿学习的,题目: Imitate with Caution: Offline and Online Imitation 之所以转载这个文章是因为这个文章还是蛮浅显易懂的, ...
- java零基础到架构师学习线路(附视频教程)
1.背景 很多人都在问,如何学java,要学那些内容,感觉学起来很痛苦,没得方向,学到什么程度才可以去找工作等, 在这里我以自己的学习经验工作经验和辅导学生的经验给大家梳理了一个学习线路和准备了我自己 ...
- vue 文件流下载
/** * 文件转为文件流 * @param {file} file //文件 */ export function getFileBlob(file) { var dataUrl va ...
- DIjkstra进阶模板 路径记录 按权重(结点数最小等)记录
struct DIJ { using i64 = long long; using PII = pair<i64, i64>; vector<i64> dis, path, n ...
- bfs优化
层次单调性 走地图 双重bfs 1.模块性 2.方案:外层bfs逆推,内层bfs重新跑 A.每次代价0/1:双端队列bfs B.每次代价任意数值:优先队列bfs(dijikstra).迭代(SPFA) ...
- 使用 SSH 转义代码来控制连接
OpenSSH 最常被忽视的一个非常有用的功能是能够从连接内部控制会话的某些方面.通过使用 SSH 转义代码,我们能够在会话内部与本地 SSH 软件进行交互. 强制从客户端断开连接(如何退出卡住或冻结 ...