windows中的软链接硬链接等

学校嘛,有些时候还是得逆逆上网客户端啥的,并且学校的不少工作,这Windows的需求还是挺强的,之前Win10的体验并不是太好,不过时隔这么久,打算从7升级到10了,恰好系统也该换了。

首先是命令行的关注,在家里使用了太久的marjaro,逐渐转为开发,以前对windows的命令行不关注也变为关注了,PowerShell安装了scoop,可以一键安装不少工具了,但是有一个痛点就是,以前对用户目录不关注,但是linux用久了反而觉得用户目录好用挖,我想在在命令行下切到我快捷方式指向的目录,但是是不行的,然后了解了一下这方面,就像是linux下的软链接硬链接一样。

使用PowerShell

软链接

1
New-Item -ItemType SymbolicLink -Path C:\\image -Target C:\\source.txt

硬链接

1
New-Item -ItemType HardLink -Path C:\\image.txt -Target C:\\source.txt

Junction

windows中文件与文件夹是完全不同的两种类型,创建文件夹链接不可以使用 HardLink ,但是可以使用 Junction

1
New-Item -ItemType Junction -Path C:\\test\_image -Target C:\\test\_source

虽然powershell可以建立,但是命令还是很繁琐,cmd下有个工具mklink

使用CMD

cmd下有个好用的工具mklink

1
2
3
4
5
6
7
8
9
C:\\>mklink

创建符号链接。
MKLINK \[\[/D\] | \[/H\] |\[/J\]\] Link Target
/D 创建目录符号链接。默认为文件符号链接。
/H 创建硬链接而非符号链接。
/J 创建目录链接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径(绝对或相对)。

软链接和硬链接的区别

其实这部分和linux中的是差不多的

符号(软)链接(Symbolic link)

  • 执行命令 mklink link_name target_name
  • 创建链接后的图标和快捷方式很像
  • 在系统中不占用空间
  • 在文件系统中不是一个单独的文件
  • 在操作系统层解析(!?)
  • 如果源文件被删除了,链接就没用了
  • 移除源文件不会影响符号链接
  • 移除链接文件也不会影响源文件

硬链接(Hard link)

  • 执行命令 mklink /H link_name target_name
  • 在系统中占用的空间与源文件相同,但在系统中引用的是相同的对象(不是拷贝)
  • 在操作系统层解析(!?)
  • 图标和创建快捷方式的图标不同
  • 移除源文件不会影响硬链接
  • 移除硬链接不会影响源文件
  • 如果源文件被删除,它的内容依然通过硬链接存在
  • 硬链接文件的任何更改都会影响到源文件

快捷方式有何不同

首先不说快捷方式占空间, 软链接不占空间,还有我觉得很重要的区别是快捷方式带后缀.lnk,是个文件,无法通过路径重定向到目标地址,反正我不太推荐这个,除非是建立到桌面方便鼠标点击的用户。

软链接和Junction的区别

可能你会疑惑 mklink 命令参数 /D/J 的区别。这里我直接贴一段我查到的东西:

  1. 创建 /d 可以使用相对路径方式创建 /j 必须绝对路径方式创建 此区别意义不大,建议所有的mklink目录均用绝对路径创建
  2. 复制和剪切 复制:/d /j 均生成源目录的内容副本,变为一般文件夹 剪切/移动:/d 生成的目录,移动到其他地方,仍旧保持链接。对源目录无影响,/d生成的目录消失 /j 生成的目录,移动到其他地方,会产生一个新的副本文件夹,源文件夹内容全部移至新普通文件夹内,源文件夹清空,源文件夹仍旧存在,/j生成的目录也依旧存在
  3. 软件打开 用filedialog打开,/d生成的目录,地址栏会跳到源目录位置。 /J生成的目录,地址栏不会跳到源目录位置。 用FolderDialog打开,两者相同。

    整体来说,/D更像一个快捷方式。

符号链接(Symlink,Softlink)是对文件或目录的引用,实际上符号链接本身是一个“记录着所引用文件或目录的绝对或相对路径”的特殊文件,通过符号链接的操作都会被重定向到目标文件或目录。

交接点(Junction),也称为“再分析点”,是 NTFS 3.0 及以上文件系统(Windows 2000 及以上系统)的特性,它是链接本地目录(可跨卷)的访问点,通过交接点的操作都会被系统映射到实际的目录上。通过建立交接点,可以在保证一个目录实例(目录的一致性)的前提下,允许用户或程序从本地文件系统中的多个位置访问此目录。
对符号链接和快捷方式的“读、写、遍历”等操作都会被重定向到目标文件或目录;但对它们的“复制、删除、移动、配置 ACL”等操作只针对自身;符号链接不但可以应用于本地系统,还可以应用 UNC 路径。

对交接点内文件和子目录的“建立、删除、修改”等操作都被映射到对应的目录中的文件和子目录上;
对交接点的“复制、粘贴、剪切、配置 ACL”,只会影响此交接点;
在同一卷内移动交接点,只会影响此交接点;但在不同卷间移动交接点,会将此交接点转换为正常目录,并且交接点对应目录下的所有内容都会被移动;
通过“资源浏览器(Explorer.exe)”和“命令行 del”等工具删除交接点时,会同时删除对应目录下的所有内容(但不会删除目录);可通过“linkd.exe /d”安全的删除交接点;但在 vista 及以后的系统中,对交接点的删除会被正确的处理。

你可以自己建立这两个后,在同卷和在不同卷间复制移动粘贴看看区别,就暂时我了解到的来说的话,我个人建议是使用/D