一,在Linux中,一切皆文件,所有的东西都可以被看做文件。所以文件信息要被管理起来,要让操作系统能够很好的运用它,那么它是如何被管理起来的?
1.被描述:自身属性和其他重要信息被描述为inode,操作系统为他们inode分配一个inode号,去标识它们。(这并不难理解,这和进程的pid是一样的道理)
2,组织:操作系统要想把它们放在磁盘里,并让它们能够有序的判断哪些inode被用,哪些没被用,所以他会有一个数据结构表,就是位图。
二,首先介绍文件系统
在磁盘的扇区中,操作系统是这样分区的
第一部分,放得是超级块:存放文件系统本身的结构信息
第二部分,放得是inode结点表(
* 文件的字节数
* 文件拥有者的User ID
* 文件的Group ID
* 文件的读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置)
第三部分:数据区:存放文件内容
重点:在i结点表中,操作系统通过位图来判断inode号是不是被占用,同理在数据区存放也是一样的道理,只有位图的标识为1,它将会去寻找下一个。
三,硬链接
操作系统是如何通过文件名,来读去磁盘上的内容的?
其实它就是通过inode号,来找到inode,通过它来找到位置,文件名只是inode号的一个别名而已,他们之间存在着映射。
其实在Linux中,可以让多个文件名对应于同一个inode,ln 命令可以实现,硬链接数,其实就是他们存在几个别名而已,
值得注意的是:当你删除一个文件名字时,如果它的硬链接数并不是0,操作系统是不会删除他的,只是把他的映射关系解除了。
四,软链接
硬链接是通过inode号引用另一个文件,而软链接是通过名字引用另一个文件的。
区别:软链接有它有独立的inode,是独立的文件。
硬链接没有独立的inode,只有特定的映射。
如果把它删除了,另一个文件的内容也将删除。
总结一下:创建一个文件一般有四个步骤:
1.描述起来,存储属性
内核通过位图先找到一个空的inode,把文件记录到其中。
2.存储数据
内核通过位图找到多个空闲块(一个扇区512字节,块指多个扇区)存储对应的数据。
3.记录分配情况
把存放在数据区的内容的号记录到inode
4,添加文件名到目录
把文件名和inode号记录到目录文件