ln软链接和硬链接的区别

什么是硬链接?

在Linux系统中每个文件都有一个索引值,创建硬链接时,硬链接的索引值和源文件的索引值相同,可以这么理解,硬链接创建的文件名和原文件的文件名的地位的等价的。
当创建一个文件时,相当于这个新创建的文件名本身就是一个硬链接,Linux系统中有一个计数值用来计数一个文件空间有多少个硬链接文件名。
当创建一个新文件时计数为1,当创建一个该新文件的硬链接文件名时,这个计数加1,当删除全部的硬链接后,即该文件计数为0则该文件将删除。
可以将硬链接理解为指针,将索引值理解为指针地址,该指针值存放在新建文件时或者创建硬链接时的文件名上,而且该指针直接指向文件所在空间。

什么是软链接?

软链接也可以理解为一个指针,只不过该指针指向的不是具体的文件空间,而是指向指向文件空间的文件名的地址。软链接相当于指向一个硬链接的文件名的地址。

实例

例如:创建一个新文件file1,创建一个指向新文件的硬链接file2,索引值都是1179695。创建新文件file1时相当于两个动作:1、开辟了一个文件空间;2、创建一个指向该文件空间的硬链接,将索引值放入文件名中。而创建一个指向file1的硬链接file2时只做了一个动作:创建了一个指向file1所指向文件空间的硬链接,也就是拷贝file1的索引值到file2中。
如下:

username@ubuntu193:~/code/demo$ touch file1|echo "file1">file1    #创建新文件file1并将字符“file1”写入文件中
username@ubuntu193:~/code/demo$ cat file1
file1
username@ubuntu193:~/code/demo$ ln file1 file2                    #创建一个硬链接file2,指向file1所指向的索引值
username@ubuntu193:~/code/demo$ ls -li                            #查看当前文件夹下所有文件名指向的索引值
总用量 8
1179695 -rw-rw-r-- 2 username username 6 Sep  8 09:13 file1       #文件名file1的索引值为1179695
1179695 -rw-rw-r-- 2 username username 6 Sep  8 09:13 file2       #文件名file2的索引值为1179695

可以看到,file1和file2的文件索引值相同,相当于都指向同一个文件空间。
然后创建一个软链接file3,该软链接指向file1,该软链接的索引值和file1的索引值不同,因为该软链接的指针相当于指向的是file1的索引值,而不是指向file1索引值所指向的文件空间。
如下:

username@ubuntu193:~/code/demo$ ln -s file1 file3                     #创建一个软链接file3指向file1
username@ubuntu193:~/code/demo$ ls -li
总用量 8
1179695 -rw-rw-r-- 2 username username 6 Sep  8 09:13 file1
1179695 -rw-rw-r-- 2 username username 6 Sep  8 09:13 file2
1179696 lrwxrwxrwx 1 username username 5 Sep  8 09:25 file3 -> file1  #文件索引值为1179696,可以看出该文件名指向的是file1,而不是file1所指向的文件空间。

当把上面的file1文件名删除时,软链接file3将失效,硬链接file2依然有效,文件空间未销毁;当把上面的file2文件名删除时,软链接file3依然有效,file1也依然有效,文件空间未销毁。
为了进一步加深理解,再为软链接file3也创建一个硬链接file4,那么该硬链接file4相当于拷贝了一份file3的指针(也就是索引值),地位和file3等价,同时也将指向file3所指向的地址空间。

username@ubuntu193:~/code/demo$ ln file3 file4
username@ubuntu193:~/code/demo$ ls -li
总用量 8
1179695 -rw-rw-r-- 2 username username 6 Sep  8 09:13 file1
1179695 -rw-rw-r-- 2 username username 6 Sep  8 09:13 file2
1179696 lrwxrwxrwx 2 username username 5 Sep  8 09:25 file3 -> file1
1179696 lrwxrwxrwx 2 username username 5 Sep  8 09:25 file4 -> file1
posted @ 2021-09-08 09:32  一只小菜菜鸟  阅读(159)  评论(0)    收藏  举报