- 博客(11)
- 收藏
- 关注
原创 文件的三个时间(Access、Modify、Change)
并不是每次访问文件Access时间都会变,对文件的增删查改,其中查的频率是最高的,意味着如果高频次的对文件的时间做修改,高频的将时间数据更新到外设中,所以每次查看文件都要去更新文件的访问时间的话,势必会增加数据被I/O的频率,进而导致整机的效率降低,所以在最新的内核中他对查看时间的修改策略发生了变化,不是每次访问都更新,这样会缓解内存和磁盘外进行交互的成本。,Change time 改变,而 Access time 、 Modify time 不变。,Access time 改变;
2024-08-31 10:49:01
141
原创 为什么我们不能给目录建立硬链接?
对目录建立应链接的能力,操作系统内部维护了,但没有暴露出来,因为容易造成环路路径问题。假设一条路径是/d1/d2/d3/hard-link,对d2创建硬链接hard-link,这会导致用户构建了一个环路路径的问题,如果输入指令find /d1/d2/ -name test.c,在d2目录里找test.c文件,指定在d2目录去找,假设递归式的找,他找到了d3里面的hard-link又把它倒到d2,这个时候他就出现了环路问题,导致出不来了,问题就解决不了了。有人说dir目录和里面的.不是一个环状的结构吗?
2024-08-31 07:31:26
301
原创 为什么创建dir空目录时硬链接数是2?
一个空目录里并不是真的空,他有很多隐藏文件,至少有一个.或者..,.是当前路径,..是上级路径,.文件也是个文件名,他有inode,且和dir是同一个inode,所以这一个.为什么能代表当前路径,是因为一个.代表的就是dir的硬链接,就会发现dir目录文件的硬链接数是2了。一个.和当前目录dir建立硬链接,就可以用一个点表示当前路径啊,两个点代表的是和上级目录建立硬链接,每个目录都是这样,Linux目录结构是一颗多叉树,除了正向的去定位,还可以反向定位。
2024-08-31 07:24:12
209
原创 软链接应用场景
假设可执行程序test在d1/d2/d3/路径下,在当前目录就要带上这条路径去指向test可执行文件,但这样打了太多路径了有点麻烦,可以创建软链接mytest,在当前目录mytest就能跑,所以他的核心作用是将一个路径很深的程序或者库,建立到当前目录,或者在一个很好找的路径下,让我们快速的访问到这个文件。他类似windows下的快捷方式,你要运行某个桌面上软件,他没有快捷方式,你只能从c盘或其他地方去找。
2024-08-31 07:20:41
117
原创 关于硬链接的引用计数
硬链接和浅拷贝不完全相同,但思想是一样的,深拷贝是把目标字符串的内容拷贝一份,浅拷贝是把指针拷一份,在浅拷贝的场景当中,对一个字符串做拷贝,如果有很多指针指向了目标字符串,万一有一个指针把字符串释放了,就会导致其他指针也失效,所以可以给释放对象的方法里面加个计数器,一个指针指向计数器就加1,10个指针指向计数器就是10,每个人释放字符串空间时不是真的释放,而是对引用计数减1,然后判断是否为0,到0才是真的释放。删掉一个文件或硬链接时,就是在当前目录下去掉文件名和指定inode对应的一个硬链接数。
2024-08-30 20:17:00
243
原创 制作软硬链接对比差别
引用计数是有多少文件名指向我,默认情况下有一个文件名和inode的映射关系,引用计数就是1,如果再创一个文件名和inode的映射关系,引用计数就加1变成2,未来删掉一个文件时对引用计数减1,只有让这个计数器减到0时,对应的文件才会真的被删掉。l是link,代表它是链接文件,链接数不变为1,软链接是一个独立的链接文件,有自己的inode number是1053355,必有自己的inode的属性和内容。软链接内部放的是自己所指向的文件路径,可以认为它里面保存的是字符串,保存的是myfile.txt文件路径。
2024-08-29 07:16:41
327
原创 文件系统小总结(inode属性、块组里划分的区域、简述文件读取过程)
磁盘是典型的块设备,磁盘分区被划分为一个个块组,一个块的大小是格式化的时候写文件系统的时候是确定的,并且不可以更改。:存放文件系统本身的结构信息,比如block和inode的总量、未使用的block和inode的总量、一个block和inode的大小、最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统相关的信息,Super Block的信息被破坏,可以说整个文件系统就被破坏了,所以在很多块组里这个Super Block字段会重复出现,从而实现备份。:块组描述符,描述块组属性信息。
2024-08-28 19:09:41
362
原创 inode和data block的映射关系
是二级编号,就是通过二级索引的15找到的,把数据块全找齐了,这个文件才算找齐,相当于两层的多叉树,一个数据块是4KB,里面包含的二级编号假设用整数来表示是4字节,4KB ÷4byte=1000,所以用这里的一个数据块能找到1000个块,每个块的大小4KB,乘以1000块大小就是4MB,通过这种二级的方式就能找到第二梯队的大小文件。357肯定是被写满了,9虽然我们不知道有没有写满,但是文件大小(size)决定了从开始位置到哪段范围是我的文件内容,所以文件就被读出来了。
2024-08-28 09:33:14
221
原创 文件系统里的分区分组是谁做的?什么时候?
平时重装系统时,系统重装非常慢,它格式化的时候,实际上它在向你的分区写文件系统信息,给你划分Super block、Group Descriptor Table等区域。如果你已经有这些区域了,只需要把位图结构清0,把属性字段设置初始状态就行,inode table和date blocks他不管。在分区完成之后,后面要让分区能够被正常使用。我们需要对分区做格式化,将分区的所有数据将全部清零。操作系统,在重装系统时,你可以选择整个系统全部重装,c盘、d盘、e盘、f盘全部重装,也可以选择按照特定分区重装。
2024-08-28 09:00:23
329
原创 inode编号可以确定全局分组,但不能跨分区
例如在1个分区中有100万个inode,我将其中前10万个inode编号分配给Block group,起始编号从0到100万,在分组里inode Bitmap编号从01234开始,真正分组内的编号在位图中的位置再加上起始编号就是该文件在全局分区上的inode编号。比如500g,你分为150、150、100、100,划分为4个区域,一个区域一套inode机制,编号从几开始你定好,inode无法划分区使用。根据inode可以确定分组,inode number是在一个分区内有效,不能跨分区。
2024-08-28 08:51:44
397
原创 在Linux上文件被误删
从原理上讲,一个文件被删除,我需要恢复它只要知道曾经被删除文件的inode编号就好了,假设已知被删除文件的inode编号,首先拿着inode编号,在特定的被删文件的分组中,将inode Bitmap对应的比特位由0置1,此时这个文件就不会再被覆盖。第二,读取inode表,提取当前文件所占用的数据块,将数据块对应的Bitmap置1,此时文件属性和内容便被恢复。什么都不要做,万一你创建文件时,它把位图由1置0,意味着对应的位图或者数据块随时可能被新文件占用。在Linux上对于删除的文件有相应的日志。
2024-08-28 08:44:49
309
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人