搞懂文件链接
文件链接(file link)是文件系统中的一个重要概念,它是指一个文件指向另一个文件的引用。
好处
它的好处在于:
- 节省空间:链接并不复制文件内容,而是指向原始文件的路径。比如 pnpm 使用了硬链接,可以节省大量的磁盘空间。
- 方便管理:链接可以简化文件管理,比如
/bin/sh
就是一个指向真正使用的 shell 的软链接。 - 便于共享:多个用户可以通过链接访问同一个文件。
- 灵活性:链接可以链接到文件或目录,允许用户以不同的方式组织和访问数据。
种类
Unix-Like
在 Unix-Like 系统中,文件链接通常有两种:
- 硬链接(hard link)
- 符号链接(symbolic link),也被称做软链接(soft link)
硬链接和符号链接都使用ln命令创建:
1 | $ ln file1.txt link1 # 创建一个硬链接 link1 指向 file1.txt |
硬链接和符号链接的根本区别在于,硬链接与原始文件共享相同的inode(使用ls -li
查看,第 1 列代表 inode 序号,第 2 列代表硬链接数)。可以认为硬链接和原始文件除了名称其它信息都一样,我们也可以反过来将原始文件看作是硬链接文件的硬链接。
除此之外,软链接还支持目录,以及指向不存在的源。
windows NTFS
在 windows NTFS 中,硬链接和符号链接和 Unix-Like 基本一致,额外增加了一种链接形式:
- 硬链接:无法跨磁盘创建
- 软链接:支持远程 SMB 网络路径
- 目录交叉点(directory junction):不支持相对路径
1 | cmd /c mklink /d AllUsers "c:\Users\All Users" |
关于软链接和目录交叉点更细节的区别,可以参考这篇回答和这篇文章。
windows 快捷方式(Shell Links)
快捷方式仍然是一个文件,有对应的数据和大小,.LNK 的具体格式可以看这里。
当我们运行一个快捷方式时,本质上是将快捷方式的属性传达给资源管理器,由后者负责检索并打开引用对象。引用对象可以是文件、目录或 URI(URL Scheme 查询指南)。
扩展阅读可以看看这篇少数派的文章:心之所想、一键直达:你可能不知道的 Windows 快捷方式玩法。