软连接和硬连接

56 篇文章 1 订阅

一、文件的存储
我们知道,文件存储在硬盘上,硬盘的最小存储单位叫做”扇区”(sector),每个扇区存储512B,操作系统读取硬盘的时候,为了提高速度他不会一个扇区一个扇区这样的读取,他会一次连续读取多个扇区,也就是一次读取一个”块”(block)。这种由多个扇区组成的”块”是文件存取的最小单位,一般常见的块的大小是4k。
文件内容存储在”块”上,而文件的基本信息则存储在inode索引结点上。

二、inode
inode是unix/linux操作系统中的一种数据结构,本质上是一个结构体,里面定义了一些变量,这些变量用来记录与文件相关的信息。在操作系统创建文件系统的时候就会创建大量的inode。inode相当于是一个索引结点,用来存放文件的基本信息。
inode这个结构体包含以下信息:
1、inode编号
2、用来识别文件类型,以及用于stat C函数的模式信息
3、文件的链接数
4、属主的UID
5、属主的组的ID(GID)
6、文件的大小
7、文件所使用的磁盘块的实际数目。
8、最近一次修改的时间
9、最近一次访问的时间
10、最近一次更改的时间

查看文件的inode信息:stat+文件名
例:
这里写图片描述
注意inode里面是不存储文件名的,上图中虽打印出来文件名,但是实际在inode中是没有文件名的,因为对于unix/linux来说文件名不太重要的。我们重点关注以下几个信息:inode编号和Links(链接数)。

三、inode的存储
inode也会消耗硬盘空间,所以硬盘在格式化的时候,操作系统会将将硬盘自动分成两个区域,一个是数据区用来存储文件数据,另一个是inode(inode table)区域,存放inode所包含的所有信息。可见,操作系统管理文件也是需要付出代价的。
inode的大小一般是128或256个字节,一般在Unix/Linux创建文件系统的时候就会同时创建大量的inode,通常将为inode表大约分配百分之一的文件系统磁盘空间空间,每次创建一个文件的时候都会为这个文件分配一个inode。
通常可能一个inode与多个文件相连接(又分为硬连接和软连接),但是始终存在一个潜藏的危险就是inode耗尽。假设 这时候数据区还有大量的空间,那么文件系统就无法再创建更多的文件了。所以监测文件系统的inode的使用情况是很重要的。

查看文件系统的inode使用情况:df
这里写图片描述
这个命令可以查看所有已挂载的文件系统或特定的文件系统,可以看到各个文件系统中使用inode的数目和所占而定百分比。
假如inode真的耗尽了,这时候就有两种解决办法:
1、通过smitty chfs为文件系统添加更多的inode表空间。
2、创建较小的inode区段。

四、inode编号
每一个inode都有一个编号,操作系统是用用inode编码来识别不同的文件的。注意在Unix/Linux的内核中是不使用文件名的,而是使用inode编号来识别文件的。对于操作系统来说,文件名知识inode编号得一个别名而已,操作系统通过文件名找到对应的inode之后接下来就没文件名什么事了。
也就是说操作系统找到文件的这个过程分为三步:
1、通过文件名找到对应的inode编号
2、通过inode获取文件信息
3、根据inode信息找到文件数据所存储的位置

查看文件的inode编号:ls -i 文件名
这里写图片描述

五、硬连接
在unix/linux文件系统中,保存在硬盘上的文件不管是什么类型都给他分配一个inode编号。一般情况下文件名与inode编号是一一对应的,但是在unix/linux中允许一个inode编号链接多个文件名,也就是对同一份数据有多个名字而已。这种机制采用的就是”引用计数”原理,在inode中有一个links变量记录这个inode链接的文件名的个数。
在”引用计数”这种机制下,如果通过某一个文件名修改这个inode编号所对应的内容的话会影响到所有的文件名。同样的只有links的值为0的时候系统就回收这个inode的空间以及他所对应的数据块。

创建硬连接:ln 源文件 目标文件
这里写图片描述
为test.c文件创建了一个硬连接,创建t.c后links就变为2了,而且test.c和t.c的inode编号是一样的。
创建目录时,会默认生成两个目录项:”.”和”..”。所以一个目录的硬连接总数最小都是2。

六、软连接
软连接又称符号连接,它是执行另一个文件的特殊文件,这种文件的内容就是它所链接的文件名的路径名。软连接是为了克服硬链接的不足而提出的,它是通过文件路径名找到它所链接的文件名的。软连接的文件有自己的inode,并在硬盘上有一块小空间存放路径名。软连接能够跨文件系统,也能和目录进行链接,软连接也可以和一个不存在的文件名进行临接,但是必须在这个不存在的问价被创建后才能打开链接。

创建软连接:ln -s 源文件名 目标文件名
这里写图片描述
可以看到,为test.c这个文件创建一个软连接t.c,test.c的inode和t.c的inode是不同的。而且test.c的链接数也没有改变。

七、inode编号的其他作用
1、有时候因为文件名中包含了一些特殊字符从而无法正常删除。这时候直接删除inode结点就可以删除文件了。
2、移动或重命名问价不改变文件的inode。
3、系统通过inode编号来操作文件。

总结:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值