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显示结果的第三列)。根据上面信息,硬链接可表示为:
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文件指定的数据进行拷贝。根据上面信息,软链接可表示为如下:
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属性没有任何变化,但是已经不能阅读。硬链接和软链接在这点的不同,可以表示如下:
硬链接文件删除操作:
软链接文件删除操作: