硬链接是以文件副本引用的形式存在的,他跟源文件拥有同一个inode节点
ln test.txt hard_link

软连接是以路径的形式存在的, 他的inode节点所对应的数据块存储的是源文件的路径。 权限位中"l"表示这是一个软链接文件;其次,在文件的后面通过 "->" 显示出源文件的完整名字。
ln -s test.txt soft_link
在这里插入图片描述
他们的区别的是:软连接可以跨文件系统创建,而且可以对目录进行创建,硬链接都不行,
所以,相对来说,软连接更加灵活,删除软连接不会产生任何影响,但是如果源文件被删除了,那么所有的软连接就失效了,很像windows下的快捷方式。

详解版本:

硬链接说白了是一个指针,指向指定的文件索引节点inode,系统并不为它重新分配inode。inode中有一个计数,硬链接同时会使这个计数加一,当计数为0时才真正删除文件。

当我们查找一个文件,比如 /root/test 时,要经过以下步骤:
  • 首先找到根目录的 inode(根目录的 inode 是系统已知的,inode 号是 2),然后判断用户是否有权限访问根目录的 block。

  • 如果有权限,则可以在根目录的 block 中访问到 /root 的文件名及对应的 inode 号。

  • 通过 /root/ 目录的 inode 号,可以查找到 /root/ 目录的 inode 信息,接着判断用户是否有权限访问 /root/ 目录的 block。

  • 如果有权限,则可以从 /root/ 目录的 block 中读取到 test 文件的文件名及对应的 inode 号。

  • 通过 test 文件的 inode 号,就可以找到 test 文件的 inode 信息,接着判断用户是否有权限访问 test 文件的 block。

  • 如果有权限,则可以读取 block 中的数据,这样就完成了 /root/test 文件的读取与访问。

    硬链接的特点如下:
  • 不论是修改源文件(test 文件),还是修改硬链接文件(test-hard 文件),另一个文件中的数据都会发生改变。

  • 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件(inode 号是 262147 的文件)都可以被访问。

  • 硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。

  • 硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。

  • 硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。

  • 硬链接的限制比较多,既不能跨文件系统,也不能链接目录,而且源文件和硬链接文件之间除 inode 号是一样的之外,没有其他明显的特征。

软链接也称作符号链接,软链接的源文件必须写绝对路径,权限位中"l"表示这是一个软链接文件;其次,在文件的后面通过 "->" 显示出源文件的完整名字

软链接和源文件的 inode 号是不一致的,其访问过程为:

  1. 首先找到根目录的 inode 索引信息,然后判断用户是否有权限访问根目录的 block。
  2. 如果有权限访问根目录的 block,就会在 block 中查找到 /tmp/ 目录的 inode 号。
  3. 接着访问 /tmp/ 目录的 inode 信息,判断用户是否有权限访问 /tmp/ 目录的 block。
  4. 如果有权限,就会在 block 中读取到软链接文件 check-soft 的 inode 号。因为软链接1. 文件会真正建立自己的 inode 索引和 block,所以软链接文件和源文件的 inode 号是不一样的。
  5. 通过软链接文件的 inode 号,找到了 check-soft 文件 inode 信息,判断用户是否有权限访问 block。
  6. 如果有权限,就会发现 check-soft 文件的 block 中没有实际数据,仅有源文件 check 的 inode 号。
  7. 接着通过源文件的 inode 号,访问到源文件 check 的 inode 信息,判断用户是否有权限访问 block。
  8. 如果有权限,就会在 check 文件的 block 中读取到真正的数据,从而完成数据访问。
    在这里插入图片描述
    通过这个过程,我们就可以总结出软链接的特点(软链接的特点和 Windows 中的快捷方式完全一致)。
    • 不论是修改源文件(check),还是修改硬链接文件(check-soft),另一个文件中的数据都会发生改变。
    • 删除软链接文件,源文件不受影响。而删除原文件,软链接文件将找不到实际的数据,从而显示文件不存在。
    • 软链接会新建自己的 inode 信息和 block,只是在 block 中不存储实际文件数据,而存储的是源文件的文件名及 inode 号。
    • 软链接可以链接目录。
    • 软链接可以跨分区。