Linux软硬链接讲解

Linux中软链接代码如下:

ln是链接的命令,加上 -s就意味着软链接,后面再接着被链接文件和链接文件,代码执行后就会出现3号框的结果,soft-link指向file.txt。

而如果我们不加-s选项,就是硬链接:

这里会发现硬链接并不会出现箭头指向,但test.txt和hard-link前面的数字由1变成了2,这个数字指的就是硬链接数。但是细心一点你会发现,这两个文件的inode是一样的,由此可见,与软链接不同,硬链接不是一个独立的文件。

当我们往test.txt中写入一段字符串的时候,我们会发现该字符串在hard-link中也存在,因为操作系统打开文件看的是inode编号,而不是文件名,这俩的文件名虽然不一样,但他们的inode编号是一样的,故里面的内容也是一样的。再说明白点,如果我们删除这两个文件中任意一个,打开另一个没有被删除的文件,仍然可以看到内容,这就像我们C语言里面的指针,两个不同的文件名就好比指针,而inode编号所指向的内容是这两个指针指向的地址,删除指针名对地址所存储的内容是不会有影响的。

这样一来,硬链接的操作实质上就是在特定目录的数据块中新增文件名和指向的文件的inode编号的映射关系,再说得通俗易懂一点就是给一个文件取别名。因此,文件前面的硬链接数实际就是一个引用计数的计数器,他所代表的是有多少个文件名指向该inode,正时因此,一般创建的文件默认硬链接数是1,因为只有这个文件名指向该inode,当我们增加新文件名指向该inode时,引用计数的计数器会加加,删除则减减,而当计数器在减减变成0的时候,操作系统就会将该文件删除,这就是为什么硬链接后删除文件不会删除内容的原因,因为计数器并没有减到0,证明还有文件名指向它,就不能删除。

回到软链接,软链接和硬链接不同,软链接是一个独立的inode,也有自己独立的数据块,而他的数据块里面保存的是指向文件的路径,我们往file.txt中写数据,通过soft-link也是可以看到内容的,因此软链接就相当于是一种快捷方式,当我们把软链接所指向的inode文件删除,该文件(soft-link)就无法再查看内容了。

接下来谈谈软链接和硬链接的应用场景

1.软链接:上文中说到了软链接就好比是一种快捷方式,这样理解的话软链接的作用就不言而喻了,软链接所处理的场景主要是用于一些需要平凡使用某一个相对位置离该文件位置很远的文件,这时我们只需要创建一个文件与该文件进行软链接,就可以直接通过该文件访问到原本需要输入一大堆路径才能访问到的文件。

2.硬链接:硬链接貌似从来没有见到过,但我们无时无刻不在使用它,我们Linux中的目录就是对硬链接的一种使用:这是一个文件,他的引用计数是2,这说明还有一个文件和他硬链接,当我们进去进看的时候会发现,有一个文件的inode和该文件一样,这个文件就是隐藏的指向文件本身的"."文件:

而这个文件就是典型的硬链接文件。

当我们在该文件中创建新的文件时,我们会发现引用计数加一:这是因为新创建的文件里面会有隐藏文件“..”,该文件指向文件上一层目录故每在一个文件中创建一个新文件,该文件的引用计数都会加一,因此,我们以后在进入一个文件之前就可以确定一个文件中包含了多少个文件,只需要将该文件的引用计数减2就是文件内的文件数,减掉的两个一个是文件本身,另一个则是文件自己当下的隐藏文件".",指向该文件本身。

但是,文件硬链接的创建我们是没有权限的,因为这很有可能会严重破坏目录这颗树的数据结构,好比我们在一个目录中硬链接到根目录,那么我们在查找一个文件的时候,find命令就会一直查找下去,因为这回形成一个环。当然,系统内部自己也存在环状结构,一个目录可以一直在“.”和“..”之间徘徊,但是系统在find时默认会屏蔽这两个文件,但你自己创建的环系统看来都是一样的,就不会屏蔽。

硬链接使得我们能够在访问文件的时候使用相对路径,如果没有硬链接,我们在访问文件的时候就一定得通过绝对路径来访问,那就相当麻烦。

因此,软硬链接实质上都是为了便利我们访问操作系统,他们都不是必须的,但没有他们在某些时候会相当难受。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘家炫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值