通过实际操作来辨别softlink和hardlink的区别:
首先我们在/home/下建立了一个文件source.file
[root@wang home]# ll
total 8
-rw-r--r-- 1 root root 26 Dec 6 12:07 source.file
接着分别建立两种连接:
[root@wang home]# ln source.file hardlink.file ----------------- hardlink
[root@wang home]# ln -s source.file softlink.file ----------------- softlink
建好连接文件之后,我们用ll命令查看一下有什么不一样的地方:
[root@wang home]# ll
total 20
-rw-r--r-- 2 root root 26 Dec 6 12:07 hardlink.file ----------------- hardlink
lrwxrwxrwx 1 root root 11 Dec 6 12:08 softlink.file -> source.file ----------------- softlink
-rw-r--r-- 2 root root 26 Dec 6 12:07 source.file
我们可以看到软连接和硬连接在四个地方不同:
1,文件类别上,hardlink显示的是正常的普通文件,而softlink生成的文件显示的是一个连接文件,并且操作权限也不一样;
2,上面输出的第二列也就是连接数不一样;
3,文件的大小不一样;hardlink生成的文件和原文件一模一样,而softlink只是一个符号连接。
4,softlink生成的文件有个指向-〉原文件的标志
接着我们用ll -i命令看一下,-i能显示出文件的inode号
[root@wang home]# ll -i
total 20
652046 -rw-r--r-- 2 root root 26 Dec 6 12:07 hardlink.file
651589 lrwxrwxrwx 1 root root 11 Dec 6 12:08 softlink.file -> source.file
652046 -rw-r--r-- 2 root root 26 Dec 6 12:07 source.file
可以看到hardlink生成的文件和原文件的inode一样,而连接数是2了;硬连接指向的是节点(inode),而软连接指向的是路径(path);所以当删除原文件,hardlink.file能正常使用而softlink.file则提示出错
总结:
(1)由于不同的分区会有相同的inode及硬连接的特殊性和文件系统的可卸载性,导致硬连接不容许跨文件系统(分区)!而 soft link 具有完整的 pathname,所以他可以跨越不同文件系统,类似windows的快捷方式。
(2)硬连接不会建产新的inode,硬连接不管有多少个,都指向的是同一个inode节点,只是新建一个hard link会把结点连接数增加,只要结点的连接数不是0,文件就一直存在,不管你删除 的是源文件还是连接的文件。只要有一个存在,文件就存在(其实也不分什么源文件连接文件的,因为他们指向都是同一个 inode节点)。当你修改源文件或者连接文件任何一个的时候,其他的文件都会做同步的修改 。软链接不直接使用inode节点号作为文件指针,而是使用文件路径名作为指针。所以删除连接文件对源文件无影响,但是删除源文件,连接文件就会找不到要指向的文件。软链接有自己的inode,并在磁盘上有一小片空间存放路径名.
(3)软连接可以对一个不存在的文件名进行连接。
(4)软连接可以对目录进行连接。
ln -s source dist # 建立软连接
ln source dist # 建立硬连接