软硬链接的区别

一、创建方法

ln [选项] 源文件 目标文件
选项:
-s:建立软链接文件。如果不加 “-s” 选项,则建立硬链接文件;

软链接的删除 在软连接的对象是目录下,切记不要自动补全删除,如果是rm -rf test/ 那么原目录下的文件都会被删除!!!
rm -rf test #切记不要自动补全

二、软硬链接概念理解:

一句话概括就是:软链接用windows中的概念来理解就相当于一个快捷方式;而硬链接实际上是文件的一个别名
,硬链接指向的内容和原文件名所指向的是同一片硬盘空间软硬链接的理解

Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接 与软链接 ,硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

在这里插入图片描述

在这里插入图片描述

三、不同点(区别)

从挂载点不同入手:
硬链接,只能应用于文件,而不能应用于目录,而且不能跨文件系统(即分区)。不可以在不同文件系统的文件间建立链接。  
软链接:可以跨文件系统

为什么硬链接不可以跨分区创建,而软连接可以跨分区创建

操作系统读取磁盘文件的流程是这样的:

根据dictionary的对应关系找到该文件的inode(dictionary简单理解就是一张表,存储文件到inode号的映射)。根据inode,找到inodeTable,根据inodeTable中的对应关系,找到对应的block。
在这里插入图片描述

补充:文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block

软连接又为什么可以跨分区跨文件系统呢?

在这里插入图片描述

理解一
由这张图我们发现无论硬链接和软连接都由 链接名字+inode+block 组成,不同的是软连接block里面的内容是一个地址(硬链接的地址或者说是源文件的地址),软硬链接他们的block是不同的,系统一次性读取一个块block,所以读取到软连接根据软连接指向的block可以找到真正源文件(硬链接),反之如果读到跨分区block的硬链接,硬链接指向的inode号还是原来的inode号,但是块block在原来的block里,导致硬链接组曲不到真正的源文件

理解二
硬链接的文件是同分区下指向同一个inode的两个文件,故硬链接不能夸分区.那当我在A分区下为文件test建立硬链接test1的时候,我访问test1,test文件的atime也会跟着改变,那么当我把test1移动到另一个分区的时候.test1的inode号虽然没变.但是test1文件属性(block变了)的变化已经不会对test文件造成影响了,说明跨分区生成了新的inode元数据库,跟之前分区的inode元数据就没有关系

关于为什么不能跨文件系统?我是这样理解的。首先,不同的文件系统的文件管理方式不同,甚至有些文件系统不是索引文件系统,并不一定两个文件系统的inode有相同的含义。再者,即使有相同inode含义,硬链接的几个文件,具有相同的inode号码。不同文件系统中,也可能有使用该inode号的文件,这将产生矛盾。

为什么硬链接不能应用到目录

硬链接不能对目录创建受限于文件系统的设计。
Linux 文件系统中的目录均隐藏了两个特殊的目录,当前目录.和父目录…其实是两个硬链接,若系统运行对目录创建硬链接,则会产生目录环。
目录是种特殊的文件,普通文件不会存放自己的位置信息,只有一个inode [x]的数据结构指向文件,其中,x是文件的inode索引号码。 而我们ls一个目录,会发现目录文件最开始的两条数据是“.“和”…",也就是说,目录文件在文件里 已经写死了自己在文件系统中的位置 允许目录的hard link,也就意味着某个目录的hard link集合,只有一份是对的,显然这没有意义。
谢邀。 既然是刚学习,你得理解linux文件存储和硬链接的实现原理。

软连接就相当于我们win中的快捷方式即如果你软连接一个目录只是一个目录的快捷方式到指定位置,操作系统找这个快捷方式会直接找到真实目录下的文件。但是硬连接的话,相当于镜像的方式,你创建一个目录的硬连接之后,操作系统需要把这个目录下所有的文件都要做一次硬连接(复制一份过去),这样操作系统在访问这个链接的时候要不断去遍历,大大增加复杂度,而且很容易进入死循环。现在linux没有很好支持这个 所以 不支持。
(答案来源:狂奔的蜗牛 链接:https://www.zhihu.com/question/50223526/answer/119998834 )

对RHCE这个目录创建快捷方式,打开的是原来的文件夹,并没有打开出现的直接是这三个文件

在这里插入图片描述

总结:

1)硬链接原文件&链接文件共用一个inode号,说明他们是同一个文件;而软链接原文件&链接文件拥有不同的inode号,表明他们是两个不同的文件;
2)链接数目(inode)是不一样的,软链接的链接数目不会增加,硬链接会相应的加一;
  3)在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系,就像文件被复制了一份一样;
    
  4)文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,而这里软链接显示的大小与原文件就不同了

硬链接和源文件是同一份文件,而软连接是独立的文件,类似于快捷方式,存储着源文件的位置信息便于指向。
使用限制上,不能对目录创建硬链接,不能对不同文件系统创建硬链接,不能对不存在的文件创建硬链接;
可以对目录创建软连接,可以跨文件系统创建软连接,可以对不存在的文件创建软连接。

再次总结:不同点分三个关键词:
inode(共用一个innode, 链接数目)
文件(文件大小、文件属性、目录文件、不存在的文件、不同文件系统)

四、作用

文件的作用:
操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。
链接文件的作用:
链接为 Linux 系统解决了文件的共享使用

硬链接的作用
允许一个文件拥有多个有效路径名,对重要的文件建立硬链接,以防止“误删”源数据(很多硬件,如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接)。
实现在一个文件系统内的文件共享,解决存储空间。

软链接的作用
存在是为了解决硬链接存在的两个缺点
不能对目录进行链接;
不能跨文件系统进行了链接。
便于文件的管理。比如把一个复杂路径下的文件链接到一个简单路径下方便用户访问,类似于windows下的桌面快捷键方式。
节省空间解决空间不足问题。因为软链接可以跨文件系统,所以当某个文件文件系统空间已经用完了,但是现在必须在该文件系统下,创建一个新的目录并存储大量的文件时,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中。

五、作用执行对象

链接的作用对象是文件名

六、如何判断是硬链接还是软链接

根据文件属性,输入命令ll,第一个字母是l的是链接文件,并且是软链接文件,如果没有表示就是硬链接文件或者普通文件
就进入到软链接目录里ls查看,软链接名字的文件是否为浅蓝色。

  • 14
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值