您的位置:首页 > 运维架构 > Linux

Linux文件系统分析之四(目录项)

2015-11-01 15:16 309 查看
下面顺着分析之三的思路,追溯到19号磁盘块,首先算出其偏移地址19*1024=19456即4C00处,这里的磁盘映象如下:

00004c00h: 01 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

00004c10h: 01 00 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

00004c20h: 02 00 62 69 6E 00 00 00 00 00 00 00 00 00 00 00 ; ..bin...........

00004c30h: 06 00 64 65 76 00 00 00 00 00 00 00 00 00 00 00 ; ..dev...........

00004c40h: 19 00 65 74 63 00 00 00 00 00 00 00 00 00 00 00 ; ..etc...........

00004c50h: 1E 00 75 73 72 00 00 00 00 00 00 00 00 00 00 00 ; ..usr...........

00004c60h: 3C 00 74 6D 70 00 00 00 00 00 00 00 00 00 00 00 ; <.tmp...........

00004c70h: 44 00 72 6F 6F 74 00 00 00 00 00 00 00 00 00 00 ; D.root..........

00004c80h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; 该块后面都为0

这里每一行,即16个字节,表示一个目录项。

struct dir_entry{

unsigned short inode;

char name[NAME_LEN];

};

第一个目录项,4c00那一行中,inode为01,表示该目录所在i节点为第1个i节点,name为"."就是所谓的当前目录了"/",这个目录i节点确实

就是第一个,即我们在分析之三中分析的那个。

第二个目录项,inode为01,name为".."表示上一层目录,目前已是根目录了,上层目录也是根目录,这就是为什么在根目录时执行cd ..命令

时结果还是根目录。

第三个目录项,inode为02,name为"bin",它就表示/bin目录了。

后面的几个同理可知其涵义。如此,这个文件系统根目录下面有.,..,bin,dev,etc,usr,tmp,root这8个目录了,每个目录占用16个字

节,总共就占用了128个字节了,这个数字和分析之三中的i_size为128刚好吻合。

下面我们顺藤摸瓜,看看这个root目录下面有些什么东西。root位于第44H=68个i节点,在磁盘映象中找到如下:

00001860h: ED 41 00 00 20 00 00 00 00 58 9C 29 00 02 4D 05 ; 鞟.. ....X?..M.

00001870h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

这个root目录的i节点显示其数据块在054DH=1357块中,即1357*1024=153400H处

00153400h: 44 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ; D...............

00153410h: 01 00 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

除了两个.,..目录外这个目录下面什么也没有,可以看到.目录就是当前目录,其i节点为44,..指向根目录,而根目录i节点为01,和前面的

分析刚好吻合。

再看看usr目录下面有什么东西,usr位于第1EH=30个i节点,再磁盘映象中找到如下:

000013a0h: ED 41 00 00 50 00 00 00 80 79 73 29 00 05 95 01 ; 鞟..P...?ys)..?

000013b0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

这个目录的i节点显示其数据块在0195H=405块中,即405*1024=414720=65400H处

00065400h: 1E 00 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

00065410h: 01 00 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

00065420h: 1F 00 62 69 6E 00 00 00 00 00 00 00 00 00 00 00 ; ..bin...........

00065430h: 3B 00 6C 6F 63 61 6C 00 00 00 00 00 00 00 00 00 ; ;.local.........

00065440h: 3D 00 72 6F 6F 74 00 00 00 00 00 00 00 00 00 00 ; =.root..........

显然比root目录多了bin,local,root目录了,下面往该文件系统中写一个文件,看看通过这里的分析方法是否能够找到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: