当前位置: 首页 > Linux

UNIX对文件的处理

时间:2023-04-06 19:03:29 Linux

“一个inode存储了关于常规文件、目录或其他文件系统对象的所有信息,除了它的数据和名称。”每个文件对应一个i-node,i-node存储了除文件名和文件内容以外的所有信息。了解文件系统如何访问文件:1.根据文件名,通过Directory中的对应关系,找到文件对应的inodenumber2,然后根据inodenumber读取文件的inodetable3,然后根据Inode表中的Pointer读取对应的Blocks文件夹也是一种文件。它在创建时需要占用一个inode,对应的数据块存放目录的内容。内容是目录下所有文件(文件夹)的名称和对应的inode号。unlink和rm的关系执行unlink()函数不一定删除文件,它会先检查这个文件在文件系统中的连接数是否为1,如果不是1,说明这个文件有其他链接对象,所以只为这个文件的连接数减1。如果连接数为1,此时没有进程打开文件,内容就会被真正删除。在有进程打开文件的情况下,暂时不删除,直到所有打开文件的进程结束,文件才会被删除。superblock:记录文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式和相关信息;inode:记录文件的属性,一个文件占用一个inode,同时记录这个文件数据所在的块号;block:实际记录文件的内容,如果文件太大,会占用多个block。读取文件时,总是从根目录开始读取,每个目录或文件,在VFS中,都是一个文件对象,每个文件对象都有一个唯一的inode与之对应。根目录的inode号为0,在superblock中,可以根据inode号快速索引到具体的inode,所以第一个读取的inode就是根目录。读取目录后,内核对象会为文件对象创建一个dentry,并缓存起来,以便下次读取时直接从内存中取出。目录本身也是一个文件。目录文件的内容是目录中文件的名称和inode号。目录文件的内容就像一张表,记录了文件名与其inode号的映射关系。根据路径可以找到需要读取的下一级文件的名称和inode,继续为文件建立dentry。dentry结构是一个双向结构,包含指向父节点和子节点的指针。多个这样的双向结构在内存中构成一个树状结构,即文件系统的目录结构缓存在内存中。有了这个缓存,我们通常在访问文件系统的时候就会非常快。link和cp关系复制文件(cp)会重新创建一个文件,复制相同的内容,占用新的空间,新的inode,这是两个文件。硬链接实际上增加了原始文件的数量并创建了一个连接。删除源文件或硬链接时,计数减1,到0后删除文件。cp对inode的影响:1.发生复制时,系统会发现一个空的inode号,以及然后将数据写入inode表2。将添加一个新目录,将文件的文件名映射到inode编号3。处理完inode号和inode表后,系统会将文件内容复制到新添加的文件中。mv对inode的影响:前提:mv命令移动的文件目标位置与原file1在同一个文件系统。系统会新建一个目录项,并将新文件名映射到inode号2.删除旧文件(移动文件的行为对inode表没有影响,也不会把文件移动到其他块)rm对inode的影响:1.系统会减去文件的linkcount号,然后将对应的inode号标记为可用。2、文件占用的块也会被打上一个可用的“标签”。3.最后去掉文件名和目录项================================================PS:当我们使用rm命令时,系统实际上并没有删除数据。除非有文件,否则数据必须存储在原始文件的这些块中。这样,原来的块就会被新文件覆盖。=================================================https://blog.csdn.net/lqt641/...