Linux VFS-硬连接和软连接区别

1.inode节点

Linux VFS其中有一个对象是索引节点,它记录了与具体文件相关的信息,存储在磁盘上,与磁盘上的文件控制块相对应。它用索引节点号进行标识,与数据区相对应,两个不同的数据区的inode节点号一定不相同。

得用ls -il 可以查看inode节点号,如下所示:

425153 drwxr-xr-x 2 root root    4096 07-15 19:18 ATIDriver
 850308 drwxr-xr-x 8 1000 users   4096 11-16 20:34 fuse-2.8.6
  98118 -rw-r--r-- 1 root root  505334 11-16 20:21 fuse-2.8.6.tar.gz
 555969 drwxr-xr-x 3 root root    4096 11-20 11:22 Intel open storage toolkit
1635201 drwxr-xr-x 6 root root    4096 11-16 20:01 IOrunner
 588673 drwxr-xr-x 4 root root    4096 07-15 18:05 kscope
 11 drwx------ 2 root root   16384 07-14 23:51 lost+found

最左边一列就是inode节点号。

2. 硬连接与软连接

硬连接:两个文件指向同一个inode节点,即共享同一片数据区。

软连接:具有直接的inode索引节点,其链接这个文件包含被链接的文件名。

其实,硬连接让两个文件名表示同一个文件,这是通过让目录项对象的d_inode指针指向同一个索引节点,而且目录项对象的d_name指的是文件名。这样,就可以让不同的文件名指向同一个文件。硬连接能够防止“误删", 如果文件有多个硬连接,如果删除一个连接,并不影响索引节点和其它连接,只有当最后一个连接被删除后,文件才会被删除。软连接的文件实际上是一个文本文件,包含另一个文件的位置信息。

举例:

[root@localhost h]# touch file1
[root@localhost h]# ln file1 file2
[root@localhost h]# ls -l
总计 0
-rw-r--r-- 2 root root 0 12-21 17:19 file1
-rw-r--r-- 2 root root 0 12-21 17:19 file2
首先建立一个文件file1, 然后建立硬连接file2,可以看出引用计数为2. 当删除file1或者是file2时,创建的文件依然存在。因为当引用计数不为0时,不会删除索引节点及数据区,只将目录项对象删除。如果将file1和file2同时删除,那么touch的文件也就被删除了。

[root@localhost h]# ln -s file1 file3
[root@localhost h]# ls -l
总计 0
-rw-r--r-- 2 root root 0 12-21 17:19 file1
-rw-r--r-- 2 root root 0 12-21 17:19 file2
lrwxrwxrwx 1 root root 5 12-21 17:22 file3 -> file1
接下来,建立符号连接file3. 此时删除file3,对file1和file2无影响,因为符号连接只是存储了文件的位置信息。若删除file2,由于是硬连接,对file1和file3无影响。若删除file1, 由于file3存储了file1的位置信息,因此,导致file3失效,变成无效的连接。

3.区别

(1)软连接是文件路径指针,它甚至不需要原文件存在,称为断链。

(2)硬连接和原文件指向一个索引节点,即同一片数据区,此数据区必须存在。

(3)硬连接不能跨文件系统,因为不同文件系统的inode节点是不相同的。软连接可以。

(4)目录不允许建立硬连接,容易造成文件系统混乱。目录 可以建立软链接。参考http://c2.com/cgi/wiki?HardLink

猜你喜欢

转载自blog.csdn.net/chenjin_zhong/article/details/8364452
今日推荐