用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
运维.售后
›
运维.售后
›
初识Linux · 软硬链接
初识Linux · 软硬链接
雁过留声
论坛元老
|
2024-10-30 23:57:55
|
显示全部楼层
|
阅读模式
楼主
主题
1809
|
帖子
1809
|
积分
5427
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
目次
前言:
见见软硬链接
软硬链接的特征
软硬链接的用处
前言:
前文我们介绍了磁盘系统的理解,并且基于磁盘系统对文件系统的整体框架有了一个简单的理解,我们都是通过“想要见地没有打开的文件”这个话题引出来了以上的两个主题,紧随其后的,是软硬链接部分,对于软硬链接部分,我们仍然从
是什么 为什么 怎么做
来了解这部分的知识点。
那么,进入主题吧!
见见软硬链接
我们通过指令:
ln -s file_target.txt file_soft.link
天生一个链接文件,链接文件指向的是file_target.txt。那么这个链接是软链接照旧硬链接我们先不管。
创建好了链接之后,我们往文本里面写入一段Hello world。写入成功之后,我们cat两个文件,发现两个文件都可以打开。
此时我们执行指令ll:
可以发现file_soft.link是指向了file_target.txt文件的,那么当我们删除了file_target.txt之后:
可以发现file_soft.link这一行就变红了,此时我们尝试打印:
就报错了,说是没有这个文件。
那么我们重复刚才的操作,重新创建一个文件,并用-s选项链接一下:
那么我们试试用上篇文章的知识-inode?
发现它们的inode不是一样的,所以它们是两个独立的文件,而file_soft.link指向的是文件file_target.txt,当文件file_target.txt删除之后,指向失效了,所以bash历程报错。
以上通过选项-s我们可以知道,其实ln -s选项创造的链接就是软毗连,因为柔软的英文是soft呗。以上是软毗连。
那么我们不妨简单看看硬链接:
我们不带s选项,形成的就是硬链接,所以ln默认形成的是硬链接,此时打印是和软毗连一样的:
那么同理,我们先ll一下:
惊讶的发现,inode居然是一样的?
并且发现权限后面的数字还和软毗连有点不一样?
那么以上的种种发现,我们进入第二阶段。
软硬链接的特征
我们先聊聊软链接,其实通过上文的介绍,我们已经了解了软毗连的部分特性。
软链接自己是独立的文件,假如删除了链接指向的文件,链接属性就失效了,而我们在windows系统上也能得到类似的效果,其实就是windows里面的快捷方式:
像这样,我们点开对应的快捷方式,里面对应的目标,就是属性对应的文件位置,这其实就是一种软链接,而软链接这个文件的内容就是目标位置的路径的字符串。
接下来我们谈谈硬链接:
首先第一个点,硬链接是一个独立的文件吗?
那肯定不是了,因为硬链接不具有独立的inode number,因为它的inode number是来源于file_target.txt的,这是硬链接的第一个特征。
第二个点,后面的数字1 2是什么意思?我们不妨先尝试删除目标文件试试:
删除了之后,我们发现照旧可以正常的打印,然后我们重新ll -i一下:
可以发现权限后面的数字已经变成了1,那么我们联合C++11部分的智能指针部分,我们也能大差不差的联想到似乎是引用计数?
答案就是的!这个数字代表的是硬链接数,相当于硬链接数减到0,才会在内核里面free掉struct file对象。
那么,什么是硬链接呢?
硬链接就是在指定目次下,创建新的文件名和inode number的映射关系!!
但是这样我们理解并不深刻,既然Linux中一切皆文件,那么我们想看看目次这个文件对应的硬链接呢?
我们惊讶的发现,test_link的硬链接数居然是2?
凭什么?我们创建这个目次以来,就没有创建过链接啊!!
那么我们看看该目次里面有什么呢?
你看这个. 我们在最开始学习目次的时间,就知道了这个.是用来表示当前目次的!!那么既然是指向的当前目次,那么这是不是一种硬链接呢?当然是的!!
所以目次的默认硬链接数是2。
软硬链接的用处
讨论软硬链接的用处之前,我们必要讨论一个问题:
我们可以有几种方式找到一个文件?
以我们目前学的点来看,目前是两种:
第一是通过路径,第二就是直接找到该文件对应的inode。
那么对于软链接来说,软链接使用的方式就是第一种,直接通过路径,因为软链接这个文件里面的内容就是目标路径的字符串,所以一般对于软链接来说,巨细都是1.
那么对于硬链接来说,硬链接使用的方式就是直接找到文件对应的inode,因为硬链接自己就不是一个独立的文件,拥有的inode都是已经创建好的。
那么上文提到,硬链接就是文件备份,并且我们知道了目次默认是有两个硬链接的,一个是目次自己,一个是目次里面的. 指向的就是当前目次,但是我们还知道硬链接里面还有..
对于..来说,我们知道的是它指向的是上级目次,所以:
因为我们在目次里面创建了的照旧目次,所以..指向的就是上级目次,即test_link的硬链接数就是3.
所以我们要得到一个目次里面有多少个目次,我们可以
直接用该目次的硬链接数 - 2
.
那么我们是否可以给目次创建一个硬链接呢?
这是不行的,但是软链接是可以的。
但是为什么不能给目次创建硬链接呢?
这是为了防止形成
路径闭环
。
假如在 /home/user 下创建一个硬链接指向 /home/user,那么通过这个硬链接就可以返回到这个目次,在遍历文件系统时就会形成无穷循环。
假设一条路径是/d1/d2/d3/hard-link,对d2创建硬链接hard-link,这会导致用户构建了一个环路路径的问题,假如输入指令find /d1/d2/ -name test.c,在d2目次里找test.c文件,指定在d2目次去找,假设递归式的找,他找到了d3里面的hard-link又把它倒到d2,这个时间他就出现了环路问题,导致出不来了,问题就解决不了了。
对于链接部分,介绍到了这里。
那么此时,你对 ./a.out的理解是否加深了呢?
感谢阅读!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
雁过留声
论坛元老
这个人很懒什么都没写!
楼主热帖
XShell免费版的安装配置教程以及使用教 ...
阿里云体验有奖:如何将 PolarDB-X 与 ...
day02-代码实现01
【如何优化她】教你如何定位不合理的SQ ...
微服务大行其道的今天,Service Mesh是 ...
十年技术进阶路,让我明白了三件要事( ...
常用类-LocalDate、LocalTime、LocalDa ...
无需支付688苹果开发者账号,xcode13打 ...
Elasticsearch 入门实战(5)--Java API ...
鸿蒙3.0来了,这次,我真的想批评鸿蒙 ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
数据仓库与分析
快速回复
返回顶部
返回列表