VFS的索引节点 链接

  • Post author:
  • Post category:其他



文件系统处理文件所需要的所有信息都放在称为索引节点的数据结构中。文件名可以随时更改,但是索引节点对文件是唯一的,并且随文件的存在而存在。

VFS

索引节点的数据结构

inode



/includ/fs/fs.h

中定义如下(

2.4.x

版本)






当一个文件系统被格式化成ext2或者ext3的时候,就会产生Inode number。


1、用ls -i命令来查看文件系统对象的索引节点号

$ ls -i /usr

558145 bin



607393 games



2429605 kerberos


705889 local







131329 share



32833 X11R6




574561 dict






623809 include


640225 lib




1346113 src






590977 etc






673573 java





689473 libexec

213409 sbin









12 tmp











11 lost+found
2、文件系统的每个对象都分配到一个独一无二的索引节点号。
3、用ls -dl命令看到索引节点被引用的次数

$ ls -dl /usr/local
drwxr-xr-x


12 root




root








4096 Dec

7

2005 /usr/local

其中12表示被引用了12次。
4、创建所有缺少的父目录

$ mkdir -p $ORALCE_BASE/admin/$ORACLE_ADMIN/bdump
5、创建空文件

$ touch junli.log
6、硬链接和符号链接(软链接)


$ ln firstlink secondlink

$ ln -s firstlink secondlink


一个给定的索引节点可以有任意数目的硬链接,该索引节点一直存在于文件系统,直到所有的链接消失。硬链接不能跨越文件系统。


符号链接是一种专门的文件系统,链接通过名称引用另一个文件,而不是直接引用索引节点。符号链接不阻止文件被删除,如果目标文件消失,

那么符号链接仅仅不可用。

符号链接比硬链接更灵活,

可以给任何类型的文件对象(包括目录)符号链接。

又因为符号链接的实现是

基于路径

的(而不是索引节点),

所以创建指向另一个文件系统上的对象的符号链接是完全可行的





读取和修改一个文件:


1、我们首先根据文件名,找到这个文件的Inode-no(节点数)。

2、当我们找到个文件的Inode-no时,就会根据这个number数在inodetable中找到对应的条目。



3、现在要我们看一看inodetable中的信息(ls -li):从左到右依次是:节点数、文件类型、文件的权限、硬链接数、用户ID、组ID、文件的大小、时间戳记,最后为指向硬盘上存放数据的数据块的指针

简单说一下其中的某些项(文件类型大有7种):

–          普通的文件

d          目录

l          链接文件

b          块设备文件

c          字符设备文件

p          命名管道

s          socket文件

从这里我们也可以看出,在linux文件系统中,目录也是当作文件来看的!对于时间戳记有三种:存取时间,修改时间,变更时间 存取时间,为最后一次打开,或者是访问这个文件的时间; 而修改时间,为最后一次修改文件的时间; 当inodetable中的某项改变时,会更新变更时间。



版权声明:本文为qduningning原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。