Skip to content

硬链接与符号链接

文件的本质

在操作系统中,文件实际上是一个指针,只不过它指向的不是内存地址,而是一个外部存储地址(这里的外部存储可以是硬盘、U 盘、甚至是网络)

当我们删除文件时,删除的实际上是指针,因此,无论删除多么大的文件,速度都非常快。

当写入新文件的时候会优先覆盖已经被删除了的文件数据。

(像我们的 U 盘、硬盘里的文件虽然说看起来已经删除了,但是其实数据恢复公司是可以恢复的)

正因为数据还是存在的,只要删除文件后再没有存储其它文件就可以恢复。

文件的拷贝

如果你复制一个文件,需要经过 2 个步骤。

  1. 将该文件的指针指向的内容执行复制

  2. 产生一个新文件指向新的内容

硬链接

通过硬链接,不会产生额外的磁盘占用,因为它们指向同一个磁盘空间。

  1. 硬链接的概念来自于 Unix 操作系统,它是指将一个文件 A 指针复制到另一个文件 B 指针中,文件 B 就是文件 A 的硬链接。

  2. 硬链接是一个实实在在的文件,node 不对其做任何特殊处理,也无法区别对待,实际上,node 根本无从知晓该文件是不是一个硬链接。

硬链接的创建方式

ln 链接名称 目标文件

windows 下执行

mklink /h 链接名称 目标文件

WARNING

由于目录(文件夹)不存在文件内容,所以不能对目录创建硬链接

符号链接(软链接)

符号链接又称为软连接,如果为某个文件或文件夹 A 创建符号连接 B,则 B 指向 A。

由于符号链接指向的是另一个文件或目录,当 node 执行符号链接下的 JS 文件时,会使用原始路径。类似于 windows 的快捷方式。

创建方式

ln -s 链接名称 目标文件

区别

  1. 硬链接只能链接文件,而软链接既可以链接文件,又可以链接目录。

  2. 硬链接创建出来后,仅关联文件内容。而软链接则始终和目标文件关联,不与内容直接相关。

pnpm 中对硬链接和符号链接的应用

  1. 生成.pnpm包管理目录

  2. 扫描根目录,看是否有缓存,如果没有,下载到缓存

  3. 从缓存的对应包使用硬链接生成文件到相应的代码包目录

  4. 使用符号链接,将子包直接依赖放置到各个子包的目录中

  5. 在工程的node_modules下使用符号链接放置直接依赖