Linux中的软链接和硬链接

文章目录
  1. 1. 一、软链接和硬链接文件信息
  2. 2. 二、修改源文件,链接文件的变化
  3. 3. 三、删除源文件对链接文件的影响

在Linux中,可以使ln命令创建链接文件,默认是硬链接,如果加-s参数,就是创建软连接。

  • 软链接:和Windows中的快捷方式差不多,这个链接文件指向源文件,和源文件不同,源文件被删除时,软链接文件无法访问。
  • 硬链接:硬链接更像是源文件的副本,这两个文件指向了相同的inode,源文件被删除时,inode的硬链接数不为0,数据不会删除,此时访问硬链接文件正常。

一、软链接和硬链接文件信息

1、创建链接文件

1
2
3
4
[root@txy201-51 tmp]# echo 123 > passwd
[root@txy201-51 tmp]# ln passwd link_h_passwd
[root@txy201-51 tmp]# ln -s passwd link_s_passwd

2、查看源文件信息,inode为51380

1
2
3
4
5
6
7
8
9
10
11
[root@txy201-51 tmp]# stat passwd
文件:"passwd"
大小:16 块:8 IO 块:4096 普通文件
设备:fd01h/64769d Inode:51380 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2024-05-31 15:45:22.174997597 +0800
最近更改:2024-05-31 15:45:21.844997227 +0800
最近改动:2024-05-31 15:45:21.844997227 +0800
创建时间:-
[root@txy201-51 tmp]#

3、查看硬链接文件,inode也是51380,和源文件指向了相同的inode,而且文件属性为普通文件,而不是链接文件。

1
2
3
4
5
6
7
8
9
10
[root@txy201-51 tmp]# stat link_h_passwd
文件:"link_h_passwd"
大小:16 块:8 IO 块:4096 普通文件
设备:fd01h/64769d Inode:51380 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2024-05-31 15:45:22.174997597 +0800
最近更改:2024-05-31 15:45:21.844997227 +0800
最近改动:2024-05-31 15:45:21.844997227 +0800
创建时间:-
[root@txy201-51 tmp]#

4、再看看软连接的状态,文件的大小、指向的inode和源文件不同,文件类型为符号链接

1
2
3
4
5
6
7
8
9
10
[root@txy201-51 tmp]# stat link_s_passwd
文件:"link_s_passwd" -> "passwd"
大小:6 块:0 IO 块:4096 符号链接
设备:fd01h/64769d Inode:51379 硬链接:1
权限:(0777/lrwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2024-05-31 15:38:40.578545132 +0800
最近更改:2024-05-31 15:38:39.634544066 +0800
最近改动:2024-05-31 15:38:39.634544066 +0800
创建时间:-
[root@txy201-51 tmp]#

二、修改源文件,链接文件的变化

1、修改源源文件,可以看到软链接和硬链接文件的内容也随之改变了

1
2
3
4
5
6
7
[root@txy201-51 tmp]# echo 456 > passwd
[root@txy201-51 tmp]# cat link_s_passwd
456
[root@txy201-51 tmp]# cat link_h_passwd
456
[root@txy201-51 tmp]#

2、修改软连接文件,可以看到源文件和硬链接文件也都发生了变化,因为软连接就是指向源文件的,可以理解为对源文件的修改。

1
2
3
4
5
6
[root@txy201-51 tmp]# echo 789 > link_s_passwd
[root@txy201-51 tmp]# cat passwd
789
[root@txy201-51 tmp]# cat link_h_passwd
789
[root@txy201-51 tmp]#

3、修改硬链接文件,可以看到软链接和源文件的数据也发生了变化,因为修改硬链接,实际上修改的是inode块的数据,源文件指向的也是这个数据块,所以内容也会发生变化。

1
2
3
4
5
6
[root@txy201-51 tmp]# echo 'abc' > link_h_passwd
[root@txy201-51 tmp]# cat passwd
abc
[root@txy201-51 tmp]# cat link_s_passwd
abc
[root@txy201-51 tmp]#

三、删除源文件对链接文件的影响

1、删除源文件,软链接文件无法访问,硬链接文件访问正常

1
2
3
4
5
6
[root@txy201-51 tmp]# rm -f passwd
[root@txy201-51 tmp]# cat link_s_passwd
cat: link_s_passwd: 没有那个文件或目录
[root@txy201-51 tmp]# cat link_h_passwd
abc
[root@txy201-51 tmp]#

2、如果再创建一个和源文件一样的文件,可以看到软链接文件可以正常访问了,但是硬链接的数据和源文件不一致,你知道这是为什么吗?

因为再次创建‘源’文件之后,‘源’文件的inode发生了变化,所以数据肯定不一致。而软连接是对路径的链接,只要这个路径在,就可以访问。

1
2
3
4
5
6
[root@txy201-51 tmp]# echo 123 > passwd
[root@txy201-51 tmp]# cat link_h_passwd
abc
[root@txy201-51 tmp]# cat link_s_passwd
123
[root@txy201-51 tmp]#