Linux中软连接与硬链接的区分

1. 为test文件创建硬链接如下:

shell-test:/u/nanaal/shell$ cp -l test test1

shell-test:/u/nanaal/shell$ ln -l test test2

shell-test:/u/nanaal/shell$ ls -li

total 12

4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test

4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test1

4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test2

       命令ls显示的第一列为文件索引,在文件系统每个文件都有一个唯一的索引值。从上面的信息可以知道,test、test1、test2共享一份文件,且链接计数为3(ls显示结果的第三列)。根据上面信息,硬链接可表示为:

 

Linux中软连接与硬链接的区分

Note:

硬链接的所有文件必须在一个硬盘上,如test在磁盘/dev/sda1上面,那么test1和test2也必须在/dev/sda1上面

 

2. 为test文件创建软链接如下:

shell-test:/u/nanaal/shell$ cp -s test test3

shell-test:/u/nanaal/shell$ ln -s test test4

shell-test:/u/nanaal/shell$ ls -li

total 12

4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test

4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test1

4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test2

4298103063 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test3 -> test

4304030281 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test4 -> test

      从ls命令的输出结果可以看到, test3和test4的文件索引值均与test的索引值不同,即test3和test4均是新的文件,但是文件大小比test小,且链接计数为1. 软链接文件test3、test4只保存了源文件test的文件信息,并没有对test文件指定的数据进行拷贝。根据上面信息,软链接可表示为如下:

 

Linux中软连接与硬链接的区分

Note:

软链接的所有文件可以保存在不同的磁盘上。如test在磁盘/dev/sda1上面,test3和test4可以保存在/dev/sda2上面。

 

修改文件

1) 修改源文件test

2) 修改硬链接文件test1或test2

3) 修改软链接文件test3或test4

修改上面的文件,会发现所有的文件均跟着修改了,这这方面,软链接和硬链接没有区别。

 

删除文件

 

1)删除硬链接文件

shell-test:/u/nanaal/shell$ rm -rf test1

shell-test:/u/nanaal/shell$ ls -li

total 8

4298659818 -rw-rw-r--. 2 nanaal nanaal 6 Apr 19 06:24 test

4298659818 -rw-rw-r--. 2 nanaal nanaal 6 Apr 19 06:24 test2

4298103063 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test3 -> test

4304030281 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test4 -> test

从ls的输出可以看到,删除文件test1后,test和test2的链接计数由3变成了2. 文件test和test2可以正常阅读。

 

2) 删除软链接文件

shell-test:/u/nanaal/shell$ ls -li

total 8

4298659818 -rw-rw-r--. 2 nanaal nanaal 6 Apr 19 06:24 test

4298659818 -rw-rw-r--. 2 nanaal nanaal 6 Apr 19 06:24 test2

4304030281 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test4 -> test

从ls的输出来看,删除文件test3,对其他文件没有任何影响。且文件test和test4可以正常阅读。

 

3) 删除源文件

shell-test:/u/nanaal/shell$ rm -rf test

shell-test:/u/nanaal/shell$ ls -li

total 4

4298659818 -rw-rw-r--. 1 nanaal nanaal 6 Apr 19 06:24 test2

4304030281 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test4 -> test

从ls的输出可以看出,删除文件test后,test2的链接计数由2变为1,可以阅读。文件test4属性没有任何变化,但是已经不能阅读。硬链接和软链接在这点的不同,可以表示如下:

 

硬链接文件删除操作:

Linux中软连接与硬链接的区分

软链接文件删除操作: 

 Linux中软连接与硬链接的区分