硬链接和软连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬链接和软连接相关的知识,希望对你有一定的参考价值。

今天将重点介绍Linux中硬链接和软连接,其中会涉及到索引节点(inode),以及cp命令,rm命令,mv命令在执行的过程中对inode的影响。

inode 索引节点

  • inode(index node)表中包含文件系统中所有文件列表。 这里所说的文件系统指的是一个分区内部的文件系统。不同分区之间的inode节点号是可以重复。

  • 一个节点(索引节点)是在一个表项,包含有关文件的信息,包括
    文件类型,权限,UID,GID
    连接数,指向这个文件名的连接的次数
    该文件的大小和不同的时间戳
    指向磁盘上文件的数据块的指针
    有关文件的其他数据

  • 通俗的来说可以这样来理解,每个中国(一个Linux分区,Linux系统可看作全球)公民(分区中的文件)都有一个唯一的身份证号(inode),而每个人可以有多个名字(文件名),名字是可以重复的。也就是说,不同的省份(类似与同一个分区下不同的目录内)可以有叫同样名字的人,但是每个名字(文件名)所指向的实体(文件数据)也是不同的。同一个实体的名字会有多个,去掉其中一个对该实体并不会有影响。同样如果一个人,没有名字,他也是客观存在的。在Linux系统中也是同样的道理。我们会在文末结合rm命令,cp命令,mv命令来阐述这个原理。


数据存储简易图示


技术分享

其实了结计算机组成原理的人都会明白,计算机存储是地址和数据分开存储的。系统在读取文件的过程中,首先是通过系统中记录的文件地址找到该文件的数据块所在的位置,然后读取出该数据的相关信息。

只不过在Linux 文件系统的节点表中,不仅仅存储了该文件的节点信息,同时还存储了该文件的元数据,也就是属性信息,这些信息中包含了文件的大小,Access time ,Modify time,Change time,等,同时还有文件的创建者,所有者,文件的类型等等。这些数据都属于文件的元数据。

文件存储的详细图示

技术分享 
假设数据块的大小为4K,每个指针都指向一个数据块。假设有10个直接指针,4个间接块指针,2个双重简介块指针,一个3重间接指针。

  • 假设一个数据小于4K,一个数据块就足够了,此时,只需要一个直接指针指向一个数据块就足够了。

  • 假设一个数据块为10K,一个数据块不足够使用,那么就使用3个直接指针指向的数据块就足够。

  • 间接指针会指向 一个数据块,这个数据块不是用来存储数据的,而是用来存储指针的,每个指针的大小为4K,那么这个数据块可以存储的指针个数为1024个,那么这个简洁指针可以存储的数据块的个数就是1024块

  • 同理,双重间接指针指向的第一个数据块也是能够存储1024个指针,同时每个指针指向的数据块也是用来存储地址的,此时一个双重间接指针可以存储的数据块的个数为1024×1024块

这样这个文件系统能够存储的单个文件的最数据的大小为 10×4K+4×1024×4K+2×1024×1024×4K+1×1024×1024×1024×4K

而由于指针的存在所占用的存储空间会根据文件系统的不同而有所不同。

inode表的示意图

技术分享

  • 文件引用一个是inode 号

  • 人是通过文件名来引用一个文件

  • 一个目录是目录下的文件名和文件inode号之间的映射

  • 如果一个文件创建了硬链接,inode号是一样的,并且他们指向的是同一段文件数据。

cp命令和inode


个人博客地址:http://www.pojun.tech/ 欢迎访问

本文出自 “xiaoshuaigege” 博客,请务必保留此出处http://xiaoshuaigege.blog.51cto.com/6217242/1965102

以上是关于硬链接和软连接的主要内容,如果未能解决你的问题,请参考以下文章

什么是硬链接和软链接 --- 2021-11-08

Linux中硬链接和软链接的区别与联系!

硬链接和软连接文件

Linux的硬链接和软链接

硬链接和软连接(符号链接)

硬链接和软连接