这篇文章能让你彻底搞懂硬链接和软链接,希望耐心读完!
在开始讲解之前,咱们先过一下咱们学习一个概念或者某个知识点的方法:
第一步:我们得知道这个东西是个啥?【WHAT】
第二步:这个东西有什么用,为什么有这么个东西?【WHY】
第三步:这个东西咋么用?【HOW】
来我们按部就班,先来第一步:硬链接和软链接是啥?
这是我在其他文章里copy过来的解释。看完你来气不?这讲的是啥啊?讲完了我还是没理解硬链接和软链接是个啥东西。
为什么没看明白呢? 咀嚼了几遍后,我发现原因是我不理解索引节点Inode是什么东西,看这个解释的意思是软硬链接是依赖这个索引节点的,那么首先,咱们来搞懂什么是Inode。
又来新概念了,老样子,三步走:
第一步【WHAT】:Inode是个啥?
第二步【WHY】:Inode有啥用?Inode诞生的原因是啥?【待补充】
第三步【HOW】:Inode咋用?【待补充】
首先大家得知道文件,咱们在操作系统上都创建、修改或者删除过,这个东西咱们熟啊,那些深夜学习的资料,都是以mp4格式存在我E盘呢,当然这是windows系统了。
在linux系统里,文件包含两部分数据:
第一部分是真实的文件数据,也就是你数据的内容。比如,你在你系统里偷偷建了个文件,名称叫《北京富婆通讯录》,那么这部分数据存储的就是富婆的电话、地址、照片、三围、财产等等等了;
第二部分是存储文件的元数据信息,比如文件的创建者、文件的创建时间、文件大小等等。这种存储文件元数据的存储区域就叫做INODE,中文译名“索引节点”。通过索引节点,可以迅速定位到真实的文件数据。
上面对INODE做了个简单介绍,大家有了个概念,就是个存储文件元数据的地方,还以为有多神秘呢。下面咱们对INODE的几个属性做下简单了解,以便更深刻的理解INODE。
inode包含文件的元信息,每个文件对应一个Inode,它具体有以下内容:
可以用stat命令查看:
除了文件名之外的信息都在inode之中。为什么没有文件名,下面讲。
Inode既然存储了文件的元数据,那必然是占用存储空间的。需要注意的是,Inode的大小,在磁盘格式化的时候,就已经决定了。硬盘格式化的时候,操作系统会将硬盘分成两个区,一个是数据区域,存放文件数据;另一个就是inode区(inode table),存放inode所包含的信息。
每个Inode的大小,一般是128字节或者256字节,一般会为1KB或者2KB就设置一个Inode,在格式化的时候就给定。假设一块1G的硬盘,每个Inode的大小为128字节,每1KB就设置一个Inode,那么 inode table的大小就是 1GB/1KB * 128byte = 128M,占这个硬盘的12.5%。
由于每个文件都必须有一个inode,因此有可能发生inode用光了, 但是磁盘未满的情况。
每个inode都有一个编号,用于操作系统来识别inode。值得一提的是,操作系统不会在意文件名,而是通过inode编号来识别文件。对操作系统来说,文件名只是inode编号的别称或者绰号。
用户通过文件名打开文件,实际上,操作系统内部这个过程分为三步:
采用ls -i 命令可以查看文件的inode编号。
以上,咱们终于对Inode有了个基本认识,总结一句话就是存储文件元数据的地方。
现在,咱们再来回头看硬链接和软连接。
重新来给硬链接下个定义 :
模型图类似这样:
第一步硬链接是什么咱们知道了。那么它有什么作用呢?
我们看,两个文件名有同一个Inode编号,那说明,这两个文件名指向的就是同一个数据文件嘛,相当于一个人有两个名字。这样做的好处是啥?
避免误删。多个硬链接指向的同一个文件,只有在所有链接都被删除后,文件才会被删除 。
软连接 :
模型图类似这样:
看了上述的概念,让我想到了C语言的指针。
软链接的作用:如果你想在你删除某个文件后,其他对这个文件的链接都同时失效的话,使用软连接是非常合适的。
到这里基本上硬链接和软链接讲完了,至于最后一步怎么用,其实差不多已经讲过了。 有的时候,一个东西的诞生其实就是为了满足某种需求,知道为什么诞生也就知道怎么用了 。