美文网首页
linux 软连接和硬链接的区别(看一遍就懂)

linux 软连接和硬链接的区别(看一遍就懂)

作者: 夜空中乄最亮的星 | 来源:发表于2020-09-17 18:10 被阅读0次

    在linux下创建链接的命令:

    ln [选项] 源文件 目标文件
    选项:
    -s:建立软链接文件。如果不加 "-s" 选项,则建立硬链接文件;
    -f:强制。如果目标文件已经存在,则删除目标文件后再建立链接文件;

    命令很简单,但是您知道 软链接硬链接的区别吗?
    想要从本质上理解他们的区别,就需要了解linux中的ext4文件系统

    文件系统示意图

    ext4 文件系统会把分区主要分为两大部分(暂时不提超级块):小部分用于保存文件的inode (i 节点)信息;剩余的大部分用于保存block 信息。

    inode的默认大小为 128 Byte,用来记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件的数据真正保存的 block编号。每个文件需要占用一个 inode。大家如果仔细查看,就会发现 inode中是不记录文件名的,那是因为文件名记录在文件所在目录的 block 中。

    block 的大小可以是 1KB、2KB、4KB,默认为 4KB。block用于实际的数据存储,如果一个 block放不下数据,则可以占用多个 block。例如,有一个 10KB 的文件需要存储,则会占用 3 个 block,虽然最后一个 block不能占满,但也不能再放入其他文件的数据。这 3 个 block有可能是连续的,也有可能是分散的

    区别分析

    硬链接不会建立自己的 inode 索引和 block(数据块),而是直接指向源文件的 inode 信息和 block,所以硬链接和源文件的 inode 号是一致的;而软链接会真正建立自己的 inode 索引和 block,所以软链接和源文件的 inode 号是不一致的,而且在软链接的 block 中,写的不是真正的数据,而仅仅是源文件的文件名及 inode 号

    硬链接:
    1. 不论是修改源文件,还是修改硬链接文件,另一个文件中的数据都会发生改变。
    2. 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件都可以被访问。
    3. 硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。
    4. 硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。
    5. 硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂
    软链接:
    1. 不论是修改源文件,还是修改硬链接文件,另一个文件中的数据都会发生改变。
    2. 删除软链接文件,源文件不受影响。而删除原文件,软链接文件将找不到实际的数据,从而显示文件不存在。
    3. 软链接会新建自己的 inode 信息和 block,只是在 block 中不存储实际文件数据,而存储的是源文件的文件名及 inode 号。
    4. 软链接可以链接目录。
    5. 软链接可以跨分区

    相关文章

      网友评论

          本文标题:linux 软连接和硬链接的区别(看一遍就懂)

          本文链接:https://www.haomeiwen.com/subject/wrfryktx.html