pnpm 硬链接和软连接

390 阅读2分钟

对于操作系统来说,数据分为两种,用户数据和元数据,用户数据就是保存和记录文件的内容,元数据是这个文件的属性,比如大小、修改时间、访问时间、创建时间、存储的位置(文件所在的inode)、文件创建者等。

查看文件 inode 号:

ls -i test.js

image.png

stat 查看文件信息

image.png

创建硬链接:

ln test.js test-hard.js

image.png

创建软连接:

ln -s test.js test-soft.js

image.png

硬链接和软连接

  • 硬链接和源文件的 inode 相同
  • 软链接实际存储的是源文件的路径信息,有自己的 inode

image.png

硬链接

  • 具有相同inode节点号的多个文件互为硬链接文件;
  • 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除;
  • 只有删除了源文件和所有对应的硬链接文件,文件实体才会被删除;
  • 硬链接文件是文件的另一个入口;
  • 可以通过给文件设置硬链接文件来防止重要文件被误删;
  • 创建硬链接命令 ln 源文件 硬链接文件;
  • 硬链接文件是普通文件,可以用rm删除;
  • 对于静态文件(没有进程正在调用),当硬链接数为0时文件就被删除。注意:如果有进程正在调用,则无法删除或者即使文件名被删除但空间不会释放。

软链接

  • 软链接类似windows系统的快捷方式;
  • 软链接里面存放的是源文件的路径,指向源文件;
  • 删除源文件,软链接依然存在,但无法访问源文件内容;
  • 软链接失效时一般是白字红底闪烁;
  • 创建软链接命令 ln -s 源文件 软链接文件;
  • 软链接和源文件是不同的文件,文件类型也不同,inode号也不同;
  • 软链接的文件类型是“l”,可以用rm删除。

pnpm 中的软链接和硬链接

因为 npm 的幻影依赖问题,pnpm 生成的 node_modules 结构清晰,和 package.json 对应,其中的包实际上是软链接,链接到 .pnpm 文件夹中。

pnpm 解决磁盘占用空间问题:具体项目里的包又通过硬链接的方式链接到 user/.pnpm-store,因为硬链接是唯一的 inode,指向同一个 block,所以不会有重复的空间占用。

参考