UNIX对文件的处理

“An inode stores all the information about a regular file, directory, or other file system object, except its data and name. ”

每一个文件都对应一个 i 节点,i 节点存储了除文件名和文件内容以外的全部信息。node

了解一下文件系统如何存取文件的:
一、根据文件名,经过Directory里的对应关系,找到文件对应的Inode number
二、再根据Inode number读取到文件的Inode table
三、再根据Inode table中的Pointer读取到相应的Blocks缓存

文件夹也是一种文件,建立的时候须要占用一个inode,而对应的data block则存目录的内容,内容则是该目录下全部文件(文件夹)的名字和对应的inode number。函数

unlink 和 rm 的关系.net

执行unlink()函数并不必定会真正的删除文件,它先会检查文件系统中此文件的链接数是否为1,若是不是1说明此文件还有其余连接对象,所以只对此文件的链接数进行减1操做。若链接数为1,而且在此时没有任何进程打开该文件,此内容才会真正地被删除掉。在有进程打开此文件的状况下,则暂时不会删除,直到全部打开该文件的进程都结束时文件就会被删除。指针

  • superblock:记录此filesystem 的总体信息,包括inode/block的总量、使用量、剩余量, 以及档案系统的格式与相关信息等;
  • inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的资料所在的block 号码;
  • block:实际记录档案的内容,若档案太大时,会占用多个block 。

在读取一个文件时,老是从根目录开始读取,每个目录或者文件,在VFS中,都是一个文件对象,每个文件对象都有惟一的一个inode与之对应。根目录的inode号为0,在superblock里,能够很快根据inode号索引到具体的inode,所以读取到的第一个inode就是根目录的。读取到了该目录后,内核对象会为该文件对象创建一个dentry,并将其缓存起来,方便下一次读取时直接从内存中取。而目录自己也是一个文件,目录文件的内容便是该目录下的文件的名字与inode号,目录文件的内容就像一张表,记录的文件名与其inode no.之间的映射关系。根据路径便可找到当前须要读取的下一级文件的名字和inode,同时继续为该文件创建dentry,dentry结构是一种含有指向父节点和子节点指针的双向结构,多个这样的双向结构构成一个内存里面的树状结构,也就是文件系统的目录结构在内存中的缓存了。有了这个缓存,咱们在访问文件系统时,一般都很是快捷。code

link 和 cp 的关系
拷贝文件(cp)会从新建立一个文件而且复制相同的内容,
占用新的空间,新的inode,这是两个文件
而硬连接其实是增长了原来文件的count,并建立了一个链接,当你删除一个源文件或者一个硬连接后,count减1,到0后删除文件。orm

cp对inode的影响:对象

1. 当复制行为发生的时候,系统会找到一个空inode number,而后将数据写入到inode table 

2. 而且会新增一个目录,把文件的档案名称对应到inode number 

3. 当inode number和inode table处理好了以后,系统才会将文件内容复制到新增的文件中

mv对inode的影响:blog

前提:使用mv命令搬移的文件目的地跟原文件在同一文件系统内索引

1. 系统会新建一个目录项,将新档案名称对应到inode number 

2. 删除旧档案

(搬移档案的行为对inode table没有任何影响,也不会将档案搬移到其余的block)

rm对inode的影响:

1. 系统会减去文件的link count数字,而后将对应的inode number标记为可以使用

2. 而文件所占用的block也会打上可使用的“标签”

3. 最后移除文件名称和目录项

 ============================================

PS:

当咱们使用rm命令的时候,系统并不会真正删除这个资料。除非有档案非要将资料存储在原来档案的这些block中。这    样原来的block就会被新档案给覆盖掉。 

 =============================================

https://blog.csdn.net/lqt641/...

相关文章
相关标签/搜索