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目录了,下面往该文件系统中写一个文件,看看通过这里的分析方法是否能够找到。
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目录了,下面往该文件系统中写一个文件,看看通过这里的分析方法是否能够找到。
相关文章推荐
- Linux文件系统分析之三(i节点区)
- Linux文件系统分析之二(超级块,i节点位图和逻辑块位图)
- Linux文件系统分析之一(工具与方法)
- linux 常用基础命令 mkdir 详细介绍
- GCOV简易使用
- How To:配置Linux iSCSI客户端
- Linux编辑器vi使用方法详细介绍
- CentOS 6.5下安装MySQL 5.6.21
- Linux战地日记—Vi查找字符串
- Xmanager Enterprise Linking VM Redhat Linux AS4.7 X64–Server Configuration
- CentOS 6.5 源码安装gcc-5.2.0
- linux修改系统和硬件时间
- Linux文件管理常用命令
- Linux性能检测命令 - vmstat
- linux c学习笔记——消息队列
- 一个介绍linux的博客
- 【Linux 内核】文件系统(概念篇)
- Linux下*.tar.gz文件解压缩命令
- CentOS下安装Scala(事例为Scala2.11.7) 2015
- 【转载】Linux下makefile详解--跟我一起写 Makefile