目录
一个文件,对应一个inode属性节点,inode编号,linux在磁盘上存储文件的时候,将内容和属性分开存储
ls -i可以查看文件的inode编号
要了解inode编码,我们可以从磁盘下手,linux下df -h可以查看磁盘状态
磁盘由磁盘盘片,磁头、、、等一些设备组成,我们向磁盘磁盘写入数据,本质是改变磁盘上的正负性
为了我们能够很好的使用磁盘,我们会对磁盘进行分区,将磁盘一步步的细分,盘片-盘面-磁盘-扇区,我们对磁盘的管理本质上是对一个个小的扇区进行管理
boot block:启动块,用于扇区是否正常的
super block:文件系统的属性信息
group descreptor table:块组描述符,块组多大,已经使用了多少,有多少个inode,占用多少,剩多少,有多少block
block bitmap:假设有10000+个blocks,10000+个bit位,比特位和特定的block是一一对应的,其中bit位为1,代表该block被占用,否则标识可用
inode bitmap:假设有10000+个blocks,10000+个bit位,比特位和特定的inode是一一对应的,其中bitmap中比特位为1,代表该inode被占用,否则表示可用
inode table:inode是一个大小为128字节的空间,保存的是对应文件的属性,该块组内,所有文件的inode空间的集合,需要标识唯一性,每一个inode块,都要有一个inode编号!一般而言一个文件,一个inode,一个inode编号
data blocks:多个4kb(扇区*8)大小的集合,保存的都是特定文件的内容
(linux在存盘上存储文件的时候,内容和属性是分开存储的)
虽然磁盘的基本单位是扇区(512字节),但是操作系统(文件系统)进行IO操作的时候是4kb
,因为多次IO影响效率,操作系统还需要解耦合,来适应不同扇区大小的磁盘
假如文件很大,我们的data block会存储其他data bloc的编号,从而找到另一个文件
我们发现我们目录默认拥有读写操作,为什么呢?
在linux下,我们的目录也是一个文件,所以目录也拥有data block数据块,那么它的数据块存放的是什么呢?存的就是目录里面存放的文件的inode和文件名,让他们相互产生映射关系(操作系统是不认识文件名的,只认识inode编号)
找到文件:inode编号 -> 分区特定的bg -> inode -> 属性 -> 内容
1、一个目录下,没有重复的文件名
2、目录是文件,有自己的inode,有自己的data block,存放的是文件名和inode编号的映射关系,互为key值
目录创建文件要w权限,应该我们创建文件,要在data block中存放文件名和inode
显示文件名和属性需要r属性,应该我们需要从data block中读取属性
我们可以用ln命令来创建软硬链接
ln 想要建立链接的文件 生成的链接文件(ln默认是硬链接)
首先我们创建一个可执行程序test,并启动它,打印出hello world
然后我们建立一个硬链接,生成一个out的硬链接文件
使用ls -li查看文件的信息,第一列的编号为inode编号,红色部分是硬链接数,由于我们创建了一个硬链接,所以硬连接数变成了2,而他们的inode编号一样,说明他们属于同一个文件
假如我们删除test文件,out文件还可以运行,inode编号也没有发生变化,硬链接数降为1,说明硬链接相当于给文件取别名,不会影响文件,只有当硬链接数降为0文件才会真正删除
ln -s 想要建立链接的文件 生成的链接文件(-s是建立软连接)
我们通过ln -s test out在当前路径创建一个软连接,通过ls -li发现软连接的inode编号不和链接文件相同
当我们使用out文件的时候,可以使用,但是当我们删除test建立链接的文件后再使用out文件,就会失败
软连接在创建快捷方式中经常被使用