浅谈操作系统中的软链接和硬链接

415 阅读4分钟

题引:

昨天心血来潮的写了一篇有关vue中使用pnpm的排雷方法。发现对pnpm中软链接和硬链接的理解还是不是那么深刻。在此情况下,于是花了半天的时候查询了相关的资料。以下是自己的理解,期间会用前端的知识表达哈哈哈。

解答:

当我们使用操作系统时,不管是Linux还是Window等,都会涉及到 硬链接(hard link)软链接( symbolic link)。当然,我们不是非了解不可,但不能不满足自己的好奇心(来源于pnpm)。

1.什么是软链接?

可以理解为Window的快捷方式,当给文件创建一个快速的访问路径时,该文件依赖于源文件。当该源文件被删除时,该链接不可用。

graph TD
软链接 --> 源文件

当源文件被删除时,软链接可以理解为null,则失去作用。

1.1.软链接的特点

  1. 可以应用于目录
  2. 可以跨文件系统
  3. 有自己的索引节点(inode)号
  4. 权限无关紧要
  5. 大小为指定的绝对路径所包含的字符总数

1.2.如何实现软链接

因为实际有限,只展示Window系统的操作。 在这之前需要先说一下 mklink 这个命令

C:\Users\QD>mklink
创建符号链接。

MKLINK [[/D] | [/H] | [/J]] Link Target

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

基于上面的代码命令,我们将会用到 /D 这个命令。下面我将创建一个文件file,并将他软链接到file1


C:\Users\QD>mkdir file

//因为是同个路径,所以省略。如果需要跨盘,则要填写绝对路径
C:\Users\QD>mklink /D file1 file
为 file1 <<===>> file 创建的符号链接

命令敲完之后,我们会发现该目录生成了一个file文件及对应的file1快捷文件

image.png

软链接成功后,软链接文件和源文件都是 双向绑定 的,即两者是同步更新的。但是相对源文件来说,软链接文件的占用空间更小,因此我们可以利用该功能清理C盘较大的文件,把文件移动到其他盘,再软链接回C盘,是不会影响使用的。

1.3.作用

  1. 实现低内存的快捷方式
  2. 清理C盘空间
  3. ......

2.什么是硬链接?

相比软链接,硬链接是比较复杂。因为在操作系统的文件系统中,保存在磁盘分区的文件不管是什么类型都会给它分配一个 唯一标识(编号)。由于Window未开源的原因,可以明确知道在Linux称为 索引节点(inode index),因此我们也先暂用该概念来使用。当多个文件名指向同一个索引节点时,这可以被理解成是硬链接。硬链接的作用是允许一个文件(索引节点)拥有多个引用路径(被多次引用)。因此即使源文件被删除了,也不会影响通过硬链接产生的文件使用。因为删除只是切断自身对索引节点的链接。就像在JavaScript中,一个对象内存栈可以被多次引用,即使初始的对象赋值为null,该对象的引用依然存在,直到该对象的内存栈没有引用时,GC(Garbage Collection)才会对其回收。

graph TD
源文件 --> 索引节点
硬链接1 --> 索引节点
硬链接2 --> 索引节点

2.1.硬链接的特点

  1. 以文件副本的形式存在,但不占用实际空间
  2. 不允许给目录创建硬链接(文件夹不可硬链接)
  3. 硬链接只能在同一个文件系统中才能创建
  4. 删除其中一个硬链接或者源文件并不会影响其他硬链接的使用

2.2.如何实现硬链接

软连接的命令行是 /D,而硬链接的是 /H。本地已经创好test.txt,直接拿来使用

C:\Users\QD\file1>mklink /H test1.txt test.txt
为 test1.txt <<===>> test.txt 创建了硬链接

C:\Users\QD\file1>mklink /H test2.txt test1.txt
为 test2.txt <<===>> test1.txt 创建了硬链接

image.png

通过硬链接,也是和软链接一样保持着双向数据更新绑定的。

2.3.作用

  1. 在多用户的操作系统里,对数据做一个硬链接,利用硬链接的同步更新,就可以防止别人误删你的源文件了
  2. 硬链接桌面上明显的游戏数据,被女朋友删了还能玩
  3. ......

3.两者的区别

除了两者使用特点的不同之外,对于删除产生的副作用影响是两者最大的区分了。在软链接中,源文件删除之后所有的软链接都会失效;在硬链接中,只要文件的索引节点引用不为空,则不会影响使用。