Windows 中创建软链接和硬链接

最近更新于 2024-05-06 19:32

1 前言

在 Linux 中经常能接触到软硬链接概念,Windows 中倒是很少。这次因为搞 Stable Diffusion 需要才去查了下 MS 文档,发现有对应的命令。
我部署了两个版本的 SD,一个是 WebUI,一个是 OpenVINO 版本的,但是模型、插件这些完全是可以共用的,加起来几十 GB,复制一份副本占空间也没必要,那可以用软链接搞定的。

软链接(也称符号链接)在表面上的性质上其实和快捷方式差不多,但是本质上快捷方式是一个 .lnk 文件,文件夹和文件的快捷方式都是一个 .lnk 文件,访问快捷方式是 Windows 系统层面的实现,借助资源资源管理器或终端进行处理。软链接则是文件系统的支持,软链接是对源文件的引用,一般情况下程序“眼中”的软链接就是源文件本身。通过软链接修改文件,修改的也是源文件。删除软链接,源文件还是存在,但是删除源文件,软链接就无法使用了。
file
一般涉及创建的文件,看到的文件本身其实就是一个硬链接。文件的数据存放在“仓库”中,每个文件有编号,硬链接可以看做记录着这个编号,通过硬链接可以访问编号对应的文件。创建硬链接,相当于创建了一份编号镜像,新创建的镜像和源文件是完全一样的访问,一个文件有多个硬链接,删除任意一个都不会删除源文件,但是随着文件最后一个硬链接删除,源文件就会删除。

2 环境

Windows 11 23H2(CMD)
PowerShell 7.4.0

3 创建方法

注:有些路径下可能需要管理员权限,建议直接以管理员权限运行终端

3.1 CMD

使用 MKLINK 命令
file

文件软链接

MKLINK 名称 文件路径

文件硬链接

MKLINK /H 名称 文件路径

文件夹软链接

MKLINK /D 名称 文件夹路径

目录联结(硬链接)

MKLINK /J 名称 文件夹路径

例,我这里创建了一个 aaa 文件夹和一个 bbb 文件,然后分别创建软链接和硬链接
file
file
file

aaa 是文件夹,类型标注为 DIR,软链接为 SYMLINKD,硬链接为 JUNCTION。bbb 是普通文件,没有类型标注,软链接是 SYMLINK,硬链接也没有标注。普通文件的文件名本身就是一个硬链接,创建的硬链接和创建文件的文件名完全等同。
file

3.2 PowerShell

文件(夹)软链接

New-Item -ItemType SymbolicLink -Path 名称 -Target 路径

file

file

文件硬链接

New-Item -ItemType HardLink -Path 名称 -Target 路径

file

目录联接(硬链接)

New-Item -ItemType Junction -Path 名称 -Target 绝对路径

file

查看
file

4 性质总结

  • 通过软/硬链接复制文件是复制链接指向的文件,而不是复制链接名称,会另外复制一份文件数据。复制快捷方式会得到一个快捷方式,而不是复制快捷方式指向的文件。
  • 从好理解的角度来说,在资源管理器里看到的普通文件的名称可以看做是一个硬链接,创建硬链接就相当于另外取一个别名,名字不同,但实际都是同一块数据。一个文件只要有硬链接(名字)存在就存在,所有硬链接删除才会删除文件。
  • 通过软/硬链接可以直接访问指向的文件,不依赖于系统。快捷方式本身是一个 .lnk 文件,依赖于 Windows,通过资源管理器操作可以打开指向的文件,但是你自己写一个程序去打开快捷方式文件,打开的就是快捷方式自己,而用资源管理器则会解析快捷方式文件,去打开指向的文件。这个快捷方式其实就是 Shell 链接,详细的可以去查微软文档。
    file
Windows 中创建软链接和硬链接
Scroll to top