索引节点、硬连接和连接计数 http://lists.virus.org/bugtraq-0311/msg00279.html
符号链接 http://linuxgazette.net/105/pitcher.html
Hard links and Soft links
索引节点、硬连接和连接计数
索引节点inode:
| 引用: |
| Linux为每个文档分配一个称为索引节点的号码inode,能够将inode简单理解成一个指针,他永远指向本文档的具体存储位置。系统是通过索引节点(而不是文档名)来定位每一个文档。 |
例如:
假设我们在硬盘当前目录下建立了一个名为mytext文本文档,其内容只有一行:
| 代码: |
| This is my file. |
| 代码: |
| 1、当然这行文字一定是存储在磁盘数据区某个具体位置里(物理上要通过磁头号、柱面号和扇区号来描述,在本例中假设分别是1、20、30)。 2、假设其inode是262457,那么系统通过一段标准程式,就能将这个inode转换成存放此文档的具体物理地址(1磁头、20柱面、30扇区),最终读出文档的内容:“This is my file.” 3、所以inode是指向一个文档数据区的指针号码,一个inode对应着系统中唯一的一片物理数据区,而位于两个不同物理数据区的文档必定分别对应着两个不同的inode号码。 |
文档拷贝命令和硬链接的区别:
| 代码: |
| # cp /home/zyd/mytext newfile |
在当前工作目录建立了一个新文档newfile,其实际操作主要包括如下三步:
| 引用: |
| 1、在当前目录中增加一个目录项,其文档名域填入newfile,并分配了一个新的inode,假设是262456。 2、将原文档(在1磁头、20柱面、30扇区)的内容复制了一份到新的空闲物理块(假设是1磁头、20柱面、31扇区)。 3、填写一些其他关键信息,使系统通过这些信息及inode号码能够完成物理地址的转换。 |
所以文档复制要分配新的inode和新的数据区,虽然两个文档的内容是相同的。
硬连接hardlink:
| 引用: |
| 我们实际使用文档时一般是通过文档名来引用的。通过上面的讨论,我们知道: 1个inode号码肯定和一片完全属于一个文档的数据区一一对应。那么一个文档系统中两个或更多个不同的文档名能否对应同一个文档呢?答案是肯定的。 我们知道inode号码是记录在文档名对应的目录项中的,我们能够使两个或多个文档的目录项具备相同的inode值,实际上就使他们对应着同一个文档。 有几个目录项具备相同的inode号,我们就说这个文档有几个硬连接(hardlink), 对于普通文档,ls -l命令的连接计数count域的数值就是本文档拥有的硬连接数。硬连接能够通过ln命令建立, |
例如:
| 代码: |
| # ln /home/zyd/mytext hardlink_mytext |
就建立了一个新的文档hardlink_mytext,这个文档的inode同样是262457。建立硬连接实际上只是增加了一个目录项,但并复制文档数据区,原文档的数据区由两个文档共享。这一方面能够节约大量磁盘空间,同时能够确保两个文档能同步更新。




