Windows 中的硬链接、软连接、快捷方式和普通文件

在 Windows 中,文件可以有四种类型:

  • 硬链接
  • 软连接
  • 快捷方式
  • 普通文件

当我们正常创建一个文件时,这个文件就是普通文件

powershell 复制代码
echo 'hello' > a.txt
(Get-Item "a.txt").LinkType -eq $null
# 输出 True

然后我们可以为其添加一个软连接(符号链接)

powershell 复制代码
New-Item -ItemType SymbolicLink -Path ".\link-a.txt" -Value ".\a.txt"
# 创建符号链接时,需要提供管理员权限
(Get-Item "link-a.txt").LinkType
# 输出 SymbolicLink

网上很多人都喜欢说符号链接和快捷方式很像,但其实这完全是两样东西。

它们唯一的相似点可能就是图标上都有一个箭头。

它们的不同点在于:

  • 快捷方式本质上就是一个 lnk 文件,只不过它是专门用于提供一个快捷方式的,你可以在其中设置一个程序,同时指定参数。
  • 而符号链接一经创建,不能修改。
  • 快捷方式本身是占据空间的(比如 2KB)
  • 而符号链接是不占据空间的(直接显示为 0KB)
powershell 复制代码
(Get-Item "a.txt - 快捷方式.lnk").LinkType -eq $null
# 输出 True

不管是快捷方式,还是软连接,当源文件被删除时,这两种链接方式都会失效。而硬链接则不一样。

powershell 复制代码
(Get-Item "a.txt").LinkType -eq $null
# True
# 一个文件刚开始是普通文件

New-Item -ItemType HardLink -Path "hard-a.txt" -Value ".\a.txt"
# 为其创建一个硬链接

(Get-Item "a.txt").LinkType
# 输出 HardLink
# 此时 a.txt 文件就变成硬链接了

(Get-Item "hard-a.txt").LinkType
# 输出 HardLink

为什么为一个文件创建硬链接后,源文件也会变成硬链接呢?

这是因为硬链接本质上只是对一块硬盘空间的引用。对于一个普通文件,那么这块空间只属于它本身。所以一旦删除这个文件,其对应的空间也就会被释放。

但当你为其创建一个硬链接后,那么它所对应的空间可就不是你这个文件所独占的了,而是所有硬链接所共用的。这个我认为是很容易理解的。

这样带来的好处就是,当你删除所谓的"源文件"后,实际的空间并不会消失!只不过是硬链接的数量减少了罢了。只有当所有的硬链接都被删除后,这个空间才会被释放。

powershell 复制代码
# 查看硬链接的数量:

$ fsutil hardlink list a.txt
# 输出 \tmp\t\a.txt
# 输出 \tmp\t\hard-a.txt

$ fsutil hardlink list hard-a.txt
# 输出 \tmp\t\a.txt
# 输出 \tmp\t\hard-a.txt

对于软连接,在 powershell 中使用 dir 命令时,可以很清晰的识别出来。因为它有一个 -> 符号,并且是彩色的,但是对于硬链接,它们的表现形式简直就和普通文件一样!这个时候可以通过备用视图来查看:

普通的 dir:

powershell 复制代码
$ dir

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---            2024/4/3    22:39              7 a.txt
-a---            2024/4/3    22:39              7 hard-a.txt
la---            2024/4/3    22:39              0 link-a.txt -> .\a.txt

使用备用视图展示:

powershell 复制代码
dir | Format-Table -View childrenWithHardlink

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
la---            2024/4/3    22:39              7 a.txt
la---            2024/4/3    22:39              7 hard-a.txt
la---            2024/4/3    22:39              0 link-a.txt -> .\a.txt

可以看到硬链接文件的 mode 中展示了 la---,而在普通 dir 中仅仅只显示 -a---


硬链接文件共用一块空间,所以当你更改一个文件时,其他所有硬链接的文件内容也会跟着变化:


最后,再贴一张"找不同"的图吧,这张图可以说是 pnpm 的一半精髓了😁

相关推荐
晚烛4 小时前
CANN 调试工具与性能剖析:从日志分析到 NPU 行为追踪的完整调试体系
开发语言·windows·python·深度学习·缓存
解道Jdon9 小时前
[Budi插件:VsCode状态栏显示Copilot使用情况
ide·windows·git·svn·eclipse·github·visual studio
一个人旅程~10 小时前
如何避免在使用win安装U盘启动macbook时候出现键盘触摸板卡死的问题
windows·经验分享·macos·电脑
月走乂山11 小时前
Windows 10 WSL2 安装问题排查与解决全记录
windows·docker·hyper-v·故障排查·wsl2
jfqqqqq11 小时前
windows安装postgres的vector插件
windows
默子昂13 小时前
用ai编写的一些小工具分享
windows·microsoft
Wilbert Lee14 小时前
OpenClaw Windows 最新官方安装教程(超简单一键安装)
windows·openclaw
厌灵泽(后端小白)14 小时前
Windows11本地安装Zookeeper(最新)
大数据·windows·zookeeper·笔记本电脑
数据法师15 小时前
ZyperWin++技术深度解析:2MB的开源Windows优化工具,如何实现一键分级调优?
windows
ВаΙΙаd16 小时前
Windows文件夹共享
windows·经验分享