软链接和硬链接区别,及其实例说明

  1. 从本质看,硬链接是指向同一个文件在目录项上不同的文件名,软链接是与原文件不同的一个文件。
  2. 从inode号看,硬链接指向的都是同一个inode号,因为它们都是同一个文件,而软链接是不同的inode号,因为它与源文件并不是同一个文件。
  3. 从文件的链接数看,硬链接:文件的链接数=硬链接的个数,软链接:源文件的链接数与软链接无关。
  4. 从文件类型来看,原文件是什么文件类型,硬链接就是什么文件类型,而软链接的文件类型只能是符号链接
  5. 从跨分区情况看,硬链接不能指向不同的分区,因为它们都是同一个文件,一个文件同存在于一个分区,而软链接可以指向不同的分区,因为它与源文件并不是同一个文件。
  6. 从作用于目录看,硬链接不用作用于目录,因为如果能作用于目录,有可能形成死循环。而软链接可以作用于目录。
  7. 从链接与原文件的关系看,硬链接与文件本身是等价的,硬链接的内容就是文件的内容,而软链接是原文件的一个指针而且,其内容并不是原文件的内容,而是原文件路径的记录。
  8. 从使用格式看,硬链接:ln filename [linkname],软链接:ln -s filename [linkname]
  9. 从命令在使用相对路径的语法看,硬链接的filename的相对路径,是对于当前工作目录的,而软链接的filename的相对路径,是相对于linkname的。

实例:

#在/data/目录下创建文件f1
[root@CentOS7 data]#touch f1
#创建f1的硬链接f1.hardlink
[root@CentOS7 data]#ln f1 f1.hardlink
#查看f1和f1.hardlink元数据,是完全相同的
[root@CentOS7 data]#stat f1 f1.hardlink
  File: ‘f1’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d  Inode: 67          Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-12-08 16:16:20.141903697 +0800
Modify: 2019-12-08 16:16:20.141903697 +0800
Change: 2019-12-08 16:20:41.099885362 +0800
 Birth: -
  File: ‘f1.hardlink’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d  Inode: 67          Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-12-08 16:16:20.141903697 +0800
Modify: 2019-12-08 16:16:20.141903697 +0800
Change: 2019-12-08 16:20:41.099885362 +0800
#创建f1的软链接
[root@CentOS7 data]#ln -s f1 f1.softlink
#查看f1 f1.softlink的元数据,两者不一样
[root@CentOS7 data]#stat f1 f1.softlink
  File: ‘f1’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d  Inode: 67          Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-12-08 16:16:20.141903697 +0800
Modify: 2019-12-08 16:16:20.141903697 +0800
Change: 2019-12-08 16:20:41.099885362 +0800
 Birth: -
  File: ‘f1.softlink’ -> ‘f1’
  Size: 2           Blocks: 0          IO Block: 4096   symbolic link
Device: 803h/2051d  Inode: 68          Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-12-08 16:28:44.371851407 +0800
Modify: 2019-12-08 16:28:44.371851407 +0800
Change: 2019-12-08 16:28:44.371851407 +0800
 Birth: -
#创建一个f2.hardlink硬链接指向一个不同分区的文件,创建失败
[root@CentOS7 data]#ln /boot/config-3.10.0-957.el7.x86_64 f2.hardlink
ln: failed to create hard link ‘f2.hardlink’ => ‘/boot/config-3.10.0-957.el7.x86_64’: Invalid cross-device link
#创建一个f2.softlink软链接指向一个不同分区的文件,创建成功
[root@CentOS7 data]#ln -s /boot/config-3.10.0-957.el7.x86_64 f2.softlink
[root@CentOS7 data]#ll f2.softlink 
lrwxrwxrwx 1 root root 34 Dec  8 16:34 f2.softlink -> /boot/config-3.10.0-957.el7.x86_64
#新建目录d1
[root@CentOS7 data]#mkdir d1
#创建d1的硬链接,不让创建
[root@CentOS7 data]#ln d1 d1.hardlink
ln: ‘d1’: hard link not allowed for directory
#创建d1的软链接,成功
[root@CentOS7 data]#ln -s d1 d1.softlink
[root@CentOS7 data]#ll d1.softlink
lrwxrwxrwx 1 root root 2 Dec  8 16:43 d1.softlink -> d1
#查看/data/下的内容可知,f1有个硬链接叫f1.hardlink,有个软链接叫f1.softlink
[root@CentOS7 data]#ll -i
total 0
70 drwxr-xr-x 2 root root  6 Dec  8 16:41 d1
71 lrwxrwxrwx 1 root root  2 Dec  8 16:43 d1.softlink -> d1
67 -rw-r--r-- 2 root root  0 Dec  8 16:16 f1
67 -rw-r--r-- 2 root root  0 Dec  8 16:16 f1.hardlink
68 lrwxrwxrwx 1 root root  2 Dec  8 16:28 f1.softlink -> f1
69 lrwxrwxrwx 1 root root 34 Dec  8 16:34 f2.softlink -> /boot/config-3.10.0-957.el7.x86_64
#对f1操作写入内容,f1的大小变更了,f1.hardlink的大小也跟着变化,而f2.softlink的大小没有变化
[root@CentOS7 data]#nano f1
  GNU nano 2.3.1                        File: f1                                                      
a
b
c
[root@CentOS7 data]#ll
total 8
drwxr-xr-x 2 root root  6 Dec  8 16:41 d1
lrwxrwxrwx 1 root root  2 Dec  8 16:43 d1.softlink -> d1
-rw-r--r-- 2 root root  6 Dec  8 16:53 f1
-rw-r--r-- 2 root root  6 Dec  8 16:53 f1.hardlink
lrwxrwxrwx 1 root root  2 Dec  8 16:28 f1.softlink -> f1
lrwxrwxrwx 1 root root 34 Dec  8 16:34 f2.softlink -> /boot/config-3.10.0-957.el7.x86_64
#在filename使用相对路径的情况下,在/data/d1下创建f1的硬链接f1.hardlink,filename是相对于当前工作目录的
[root@CentOS7 data]#ln f1 d1/f1.hardlink
[root@CentOS7 data]#ll -i f1 d1/f1.hardlink
67 -rw-r--r-- 3 root root 6 Dec  8 16:53 d1/f1.hardlink
67 -rw-r--r-- 3 root root 6 Dec  8 16:53 f1
#而如果软链接,那么filename是相对于linkname的
[root@CentOS7 data]#ln -s ../f1 d1/f1.softlink
[root@CentOS7 data]#ll -i f1 d1/f1.softlink
72 lrwxrwxrwx 1 root root 5 Dec  8 17:19 d1/f1.softlink -> ../f1
67 -rw-r--r-- 3 root root 6 Dec  8 16:53 f1

你可能感兴趣的:(软链接和硬链接区别,及其实例说明)