开始学习Linux的文件系统和一些相关的操作。没有特殊指明时,下文的文件系统均指最常见的ext2/ext3。
1.文件结构
Linux中的文件和目录采用同一种结构(因此说,目录也是一种文件),都是采用inode+block表示。block(块信息)存储文件的实际内容。inode存储文件的属性(如权限,创建时间等等),inode里面最重要的信息是该文件的block块的位置。
block,是文件系统存储文件的最小单位。在创建文件系统(也就是格式化分区)时,可以指定block的大小,有1k,2k,4k等几个候选值。一个文件,至少占用一个block;一个大文件,很显然需要占用多个block。文件占用的block信息,都保存在inode节点中。所以,文件就是由一个inode节点和一个或多个block节点构成的。操作一个文件时,会先找到该文件的inode节点,然后通过inode节点找到block节点进行相应操作。下图表明此关系:
文件inode节点 -----> 文件block节点
那么,系统如何找到一个文件的inode节点呢?答案是通过目录结构。目录也是一个文件,所以也是有inode和block够成的,但是目录的block节点存放的是特殊信息(目录没有所谓的实际内容麻),是该目录下,所有文件的文件名和文件inode节点的信息。下图表明此关系:
目录的inode节点----->目录的block节点:
文件1名字--文件1 inode的位置
文件2名字--文件2 inode的位置
......(文件1,2可以是文件也可以是目录)
所有的文件和目录按照树状结构存储,最上面的根目录就是"/"(用过Linux的人都肯定知道吧)。所以系统只要保存根目录("/")的inode节点,就可以找到根目录的block节点,并得到根目录下某个文件或文件夹的inode节点,再获得对应的block节点,如此层层向下寻找,一定可以获得任意路径上的文件信息。
最后,有点显而易见的结论。一个文件系统inode节点的上限,决定了该文件系统能容纳的最大文件数量(因为每个文件都需要占用一个inode节点)。
文件系统为每个文件都分配了一个独一无二的inode编号。用命令 ls -i 可以查看一个文件indoe节点。示例截图如下: