[juliantec_list] Re: 回复:Re: 回复:关于新建目录

  • From: "Yihe Chen" <yihect@xxxxxxxxxxxxxx>
  • To: <hetao21182@xxxxxxxx>, "zguoqian011" <zguoqian011@xxxxxxx>, "app-dev-in-linux" <app-dev-in-linux@xxxxxxxxxxxxxx>
  • Date: Thu, 11 Aug 2011 15:53:05 +0800

哦,有重新看了一遍,应该是我理解错了,
你说的对,是三个目录项指向同一个i节点。

是的,linux内部使用i节点来管理文件。
i节点是一个数据结构,里面记录了文件的
一些属性信息,比方存取权限、文件所有者、
文件最近的访问时间之类的信息。另外文件
内容是存在另外地方的,并不在 i节点里。

在一个文件系统里面,可能会有很多字符串
形式的名字,对应着同一个i节点,也就是
对应着同一个文件。从这些名字出发都能
访问到 i节点,也就是访问到文件内容。

名称1 ----、
         |
         |
名称2 -、 |
      |  |
      |  |
名称3 ------> i节点 ---> 文件内容

这些字符串名字我们称之为连接,这部分
先前好象有邮件提到过的:
http://www.juliantec.info/mlist/archives/adil/2010-10/msg00002.html


实际上,我们若要读写一个文件的话,总是
给出来一个文件路径,像这样:/usr/bin/chown

这个路径中的三个字符串: usr、bin、chown
就是上面提到的三个字符串名字.他们用斜杠
分割开来了。第一个斜杠是有意义的,表示
文件系统根目录。

在 linux 里面,万物皆文件,目录也是文件。
只不过作为目录的文件,里面的内容是固定
格式的结构体所组成的数组。 每一个结构体
定义的是字符串名称到所对应i节点号的一一
映射。比方根目录(/)文件的内容可以看成是
这样的数组:

.    <-->  0
..   <-->  0
usr  <-->  2
sbin <-->  4
etc  <-->  5
..后面还有,省略之....

这个结构体即是组成目录文件的目录项。上面
右边这一列的 i节点 号是胡乱写上去的,实际
当中可能并不是这样的数字。根目录中的最前面
两个目录项 . 和 .. 对应的 i节点号都是0,也
就是都指向根目录自己。其他目录文件中的这两
个目录项中记录的i节点号就不会相等了,一个
是自己,另外一个则是父目录文件的 i节点号。

好,当给出 /usr/bin/chown 这个路径的时候,
我们需要找到 chown 文件的的 i节点号,继而
找到 i节点,然后去读写文件中的内容。查找的
时候,从 / 开始,读出其中对应usr的那个目录
项,然后从这个目录项中找到 i节点号2,沿2号
i节点,找到文件usr,发现又是一个目录文件。

然后就在 usr 目录文件中找对应 bin 的那个
目录项....这样一直下去,找到 chown 字符串
对应的目录项后,找出包含在其中的 i节点号
对应的 i节点,最后访问到文件chown中的内容。























Learning, Just As Your Favourite Thing!

Maillist, See http://www.juliantec.info/mlist/mail-lists.html
JulBlog, See http://www.juliantec.info/julblog/summary.php
JulWiki, See http://www.juliantec.info/wiki/




Other related posts: