我们知道对于Unix系列的操作系统,大多都有v节点。但是对于linux来说,只有通用的i节点,却没有v节点。
linux中,文件查找不是通过文件名称来查找的。实际上是通过i节点来实现文件的查找定位的。我们可以形象的将i节点看做是一个指针fip。当文件存储到磁盘上去的时候,文件肯定会存放到一个磁盘位置上,可以这样想象,既然文件数据是存放在磁盘上的,如果我们知道这个文件数据的地址,当我们想要读写文件的时候,我们是不是直接使用这个地址去找到文件就可以了呢?
我们可以通过一个图来看看目录项,i节点,文件数据四者之间的关系。 从上图可以看到,目录项中包含了文件名和i节点。 同时,你会发现上图中,目录项A和目录项B的i节点指向同一个存储区,其中这个存储区存放的是printf("ha")的数据。 也就是意味着helloA.c和helloB.c的内容是一样的。 硬链接和符号链接的概念
硬链接 ln -d
要想得到helloA.c和helloB.c这种关系,我们可以使用如下命令:
复制代码代码如下:
#ln -d helloA.c helloB.c
这样,就得到了helloA.c的硬链接helloB.c 对于硬链接来说。如果删掉源文件helloA.c,那么磁盘上数据文件时不会删除的。因为i节点上记录了该文件的硬链接数。只有硬链接数是0的时候,删除文件名的时候,该数据在磁盘上才会删除。
也就是说。这里,如果我们使用命令:
复制代码代码如下:
# rm -rf helloA.c
helloB.c同样可以正常使用,其内容就是printf("ha");
但是如果是符号链接:
复制代码代码如下:
#ln -s helloB.c helloC.c
这就是所谓的符号链接,符号链接其实是文件索引的索引。当源文件helloB.c删除之后,其实磁盘数据文件还在,helloC.c也无法使用。 |