[RHEL7基础篇-9] 软硬链接

111 阅读4分钟

简介

在Linux当中也有类似于Windows当中快捷方式的应用,这就是Linux当中就是链接,而链接又分为硬链接和软链接,这两个链接会有不同的特性,下面将会详细讲述硬链接与软链接的不同属性

硬链接

  1. 不能跨分区,数据一直保留在一个块内,而硬链接文件只是多出一个在不同目录下的关联,不会另外产生节点和数据块。简单来说就是不同分区不能建立硬链接;
  2. 硬链接不能使用在目录上,只能使用在文件上;
  3. 命令
    > ln sourcefile targetfile
    targetfile就是要建立的链接名字
    

在这里插入图片描述 4. 硬链接并没有占用inode

在这里插入图片描述

并且通过查看文件的inode发现,硬链接的inode与原文件的inode是相同的

在这里插入图片描述

  1. 思考

1)默认新建的文件或目录对应的连接数是多少,文件建立硬链接后,链接数的变化情况?同时链接文件的情况又是如何呢?

在这里插入图片描述

默认新建的文件或目录对应的链接数为1,为原文件本身(可以理解为我们看到的原文件本身就是硬链接),当创建硬链接后链接数会加1,如上图file3有file4、file7和file8三个硬链接,而硬链接的数量显示为4,是因为该数字包含了file3本身的这个硬链接。而链接文件的数据也和原文件是一样的

2)删除硬链接后,原始数据是否存在

在这里插入图片描述

当删除了硬链接后原始数据仍然是存在的

3)删除原文件后,查看硬链接,原始内容是否还在

在这里插入图片描述

在创建硬链接后,删除原文件,访问硬链接的文件发现内容依旧是存在的,其实这也表明了原文件的删除并不代表在硬盘当中抹去了,只是代表与该inode指向的硬盘存储区域的硬链接断开了,也解释了为什么新建立的文件或目录的硬链接数显示的是1而不是0,由于硬链接是根据分区的inode与硬盘进行链接的,所以才不能实现跨分区进行链接,因为别的分区也有相同的inode代表着该分区块当中存储的数据

在这里插入图片描述

软链接(快捷方式)

  1. 无分区限制

  2. 可作用文件和目录

  3. 会产生新节点和新块(inode),但磁盘空间消耗可以基本忽略

  4. 命令

    > ln -s sourcefile targetfile
    targetfile就是要建立的链接名字
    

在这里插入图片描述

  1. 思考

1)当删除链接文件或目录时,原始数据是否被删?

在这里插入图片描述

在硬链接部分我们提到,在Linux当中其实file4所代表的原始文件其实也是一个硬链接,在这里我们简称为原链接,当中存储的数据简称为原始数据,由上图可以看出,软链接与硬链接不同的是,软链接的链接文件并没有复制一份原始数据,只是一个链接文件指向原链接,然后通过原链接再找到当中的原始数据,所以删除原链接后原始数据并没有被删除,仍然存在于硬盘或者内存当中,只不过是原链接被删除了导致软链接文件无法找到原始数据,但通过数据恢复手段仍然能通过重新创建原链接来找回原始数据,如下图所示:

在这里插入图片描述

注:b --> inode(b) --> b数据 --> a --> inode(a) --> a数据,在这一整个链当中缺少了其中一环都会导致软链接报错,导致软链接无法找到原始数据

2)cp或mv时,是什么样的情况?

cp时并没有对软链接造成影响

在这里插入图片描述

mv时由于改变了file4的文件名,而file5所指向的是文件名为file4,所以当cat file5的时候才会报出无法找到文件或目录的错误

在这里插入图片描述

3)总的来说,软链接相比起硬链接会有空间占用少、无分区限制等优点,但是其中也有需要注意的点,例如文件拷贝或使用rsync进行同步与scp进行文件传输时应该注意文件的完整性,不要把软连接的链接文件错当作原文件进行传输。