文件链接全教程


文件链接全教程

Windows

1. 链接基础概念

在 Windows 中,“链接”实际上有几种形式,主要包括以下几类:

  • 符号链接(Symbolic Link,软链接)
    • 概念: 符号链接是一个特殊文件,其中保存了目标文件或目录的路径。它类似于 Linux 中的软链接,并且看起来和普通文件或文件夹没有区别。
    • 特点:
      • 可用于文件和目录
      • 可以跨分区甚至跨网络路径(UNC)
      • 如果目标被删除或移动,符号链接会失效
      • 从 Windows Vista 开始支持,最新 Windows(如 Windows 10/11)中在开发人员模式下可不需要管理员权限创建
  • 硬链接(Hard Link)
    • 概念: 硬链接是指向同一数据实体(数据块或 NTFS 中的文件记录)的另一个目录项。每个硬链接都与目标文件共享同一份数据。
    • 特点:
      • 仅适用于文件,不能用于目录
      • 必须在同一 NTFS 卷内(不能跨分区)
      • 删除其中一个链接不会影响其它链接或数据本身,只有当所有硬链接都删除后数据才会释放
  • 目录联接(Junction Point)
    • 概念: 目录联接也称为“联接”,用于将一个目录指向另一个目录。在早期版本中常用来兼容旧版 Windows。
    • 特点:
      • 只适用于目录
      • 创建时会自动转换为绝对路径
      • 适用于同一台计算机,支持跨盘符(但不支持网络路径)

2. 创建链接的方法

在 Windows 中创建链接主要有两种方式:通过 CMD 命令行(使用 mklink 命令)和通过 PowerShell(使用 New-Item 命令)。

2.1 使用 CMD 命令创建链接

命令语法:

mklink [[/D] | [/H] | [/J]] Link Target
  • 默认(无参数):创建文件的符号链接
  • /D:创建目录的符号链接
  • /H:创建硬链接(仅用于文件)
  • /J:创建目录联接(Junction,适用于目录)

示例:

  1. 创建文件的符号链接
    假设有一个文件 C:\Data\original.txt,我们在同目录下创建一个名为 link.txt 的符号链接:

    mklink C:\Data\link.txt C:\Data\original.txt

    此时,link.txt 实际上保存了 original.txt 的路径,当你打开 link.txt 时,系统会自动访问 original.txt

  2. 创建目录的符号链接
    假设有一个目录 C:\Data\SourceFolder,希望在 C:\Data 下创建一个符号链接目录 LinkFolder

    mklink /D C:\Data\LinkFolder C:\Data\SourceFolder

    这样,在资源管理器中打开 LinkFolder 就等同于打开 SourceFolder

  3. 创建文件的硬链接
    依然以文件 C:\Data\original.txt 为例,创建一个硬链接 hardlink.txt

    mklink /H C:\Data\hardlink.txt C:\Data\original.txt

    硬链接与原文件共享同一数据块,因此修改任一文件都会同步改变内容,但请注意:

    • 硬链接只能用于文件
    • 必须在同一卷内
  4. 创建目录联接(Junction)
    使用 /J 参数来创建目录联接,适用于目录,但和符号链接不同的是,Junction 通常保存绝对路径:

    mklink /J C:\Data\JunctionFolder C:\Data\SourceFolder

    使用 Junction 时,删除链接不会删除目标目录中的数据。

注意:

  • 创建符号链接和某些操作可能需要以管理员身份运行 CMD。
  • Windows 10 及以后版本如果开启“开发人员模式”,可以允许普通用户创建符号链接。

2.2 使用 PowerShell 创建链接

PowerShell 提供了更现代的 New-Item 命令来创建不同类型的链接。

语法及示例:

  1. 创建文件或目录的符号链接:

    New-Item -ItemType SymbolicLink -Path "C:\Data\Link.txt" -Target "C:\Data\original.txt"

    或者创建目录符号链接:

    New-Item -ItemType SymbolicLink -Path "C:\Data\LinkFolder" -Target "C:\Data\SourceFolder"

    PowerShell 中的 SymbolicLink 同样创建的是软链接,和 CMD 中 mklink 默认行为一致。

  2. 创建文件的硬链接:

    New-Item -ItemType HardLink -Path "C:\Data\hardlink.txt" -Target "C:\Data\original.txt"

    这会为 original.txt 创建一个硬链接,注意硬链接只能用于文件,且必须在同一卷内。

  3. 创建目录联接(Junction):

    New-Item -ItemType Junction -Path "C:\Data\JunctionFolder" -Target "C:\Data\SourceFolder"

    此命令会创建一个指向目录的联接,与符号链接在某些场景下效果类似,但内部处理略有差异。

提示:

  • PowerShell 命令执行时也可能需要管理员权限,具体取决于目标路径所在的位置(例如系统文件夹或 Program Files)。
  • 在使用相对路径创建符号链接时,系统会将其转换为绝对路径存储在 NTFS 中。

3. 使用场景与注意事项

3.1 常见使用场景

  • 数据备份和增量备份
    利用硬链接可以在不占用额外磁盘空间的情况下创建多个访问入口。例如,备份软件(如 Windows 版的“时间机器”)就会使用硬链接来实现增量备份。

  • 移动或重定向系统目录
    为了节省系统盘空间或实现重装系统不丢失用户数据,可以将如 C:\Users 目录复制到其他分区,然后使用 Junction 将原位置重定向到新位置:

    robocopy "C:\Users" "D:\Users" /E /COPYALL /XJ
    rmdir "C:\Users" /S /Q
    mklink /J "C:\Users" "D:\Users"
  • 开发环境下共享资源
    当多个项目需要使用同一份库或模型文件时,可以通过符号链接或硬链接共享文件,避免重复存储。

3.2 注意事项

  • 权限问题

    • 在 Windows 中,创建符号链接通常需要管理员权限;不过在 Windows 10 开发人员模式下可允许普通用户创建符号链接。
    • 硬链接不需要额外的权限,但目标文件必须在同一 NTFS 卷内。
  • 目标失效风险

    • 符号链接依赖于目标路径。如果目标移动或删除,符号链接会成为“悬挂链接”(无效链接)。
    • 硬链接与目标数据直接关联,即使原始文件名被删除,只要至少还有一个硬链接存在,数据依然可用。
  • 跨分区限制

    • 硬链接只能在同一卷内使用,而符号链接和 Junction 则可以跨卷(但符号链接可以支持网络路径,而 Junction 则不行)。
  • 命令使用环境

    • 使用 mklink 命令时建议打开管理员命令提示符
    • 使用 PowerShell 时,若涉及系统目录或受保护区域,建议以管理员身份运行 PowerShell。
  • 查看链接和删除

    直接在资源管理器操作

linux

Arc在comfyui报错 | 逐梦


文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
评论
  目录