一、前言

在 Linux 中有两种类型的文件链接,一种是软链接,也称符号链接;另一种是硬链接。下面对比实例具体说明一下两种文件链接。

二、软链接

2.1 定义

软链接(也称为符号链接)是一个实实在在的文件,该文件指向存放在虚拟目录结构中某个地方的另一个文件。这两个以符号方式链接在一起的文件彼此的内容并不相同。你可以把它想象成咱们平时使用的windows电脑的快捷方式。这里需要注意:

  • 原始文件必须已经存在
  • 如果原始文件已删除,那已经创建的软链接显示红色,并且原始文件会一闪一闪的
  • 修改软链接文件内容,原始文件内容也会被修改
  • 删除软链接文件,原始文件仍然存在

2.2 命令参数

$ ln -s 原始文件 软链接文件

2.3 示例说明

1、创建一个软链接

(1)创建一个名为1.py的原始文件

$ vim 1.py 
1111111111111111111111111
2222222222222222222222222

(2)创建名为slink_1.py的软链接文件

$ ln -s 1.py slink_1.py

创建一个软链接

(3)查看软链接文件内容

$ cat slink_1.py 
1111111111111111111111111
2222222222222222222222222

2、模拟只删除原始文件,不删除软链接文件

(1)创建一个名为1.py的原始文件

$ vim 1.py 
1111111111111111111111111
2222222222222222222222222

(2)创建名为slink_1.py的软链接文件

$ ln -s 1.py slink_1.py

(3)删除名为1.py的原始文件

$ rm 1.py -f

(4)再次查看软链接文件

$ cat slink_1.py 
cat: slink_1.py: No such file or directory

再次查看软链接文件

说明:如果原始文件已删除,那已经创建的软链接显示红色,软链接文件不复存在

3、修改软链接文件内容,查看原始文件内容是否也会被修改

(1)创建一个名为1.py的原始文件

$ vim 1.py 
1111111111111111111111111
2222222222222222222222222

(2)创建名为slink_1.py的软链接文件

$ ln -s 1.py slink_1.py

(3)修改slink_1.py软链接文件

$ vim slink_1.py 
1111111111111111111111111
2222222222222222222222222
333333333333333333333

(4)查看名为1.py的原始文件

$ cat 1.py
1111111111111111111111111
2222222222222222222222222
333333333333333333333

说明:修改软链接文件内容,原始文件内容也会被修改

4、删除软链接文件,查看原始文件内容是否也会被删除

(1)创建一个名为1.py的原始文件

$ vim 1.py 
1111111111111111111111111
2222222222222222222222222

(2)创建名为软链接文件

$ ln -s 1.py slink_1.py

(3)删除slink_1.py软链接文件

$ rm slink_1.py -f

(4)查看原始文件

$ cat 1.py 
1111111111111111111111111
2222222222222222222222222

说明:删除软链接文件,原始文件仍然存在

三、硬链接

3.1 定义

硬链接创建的是一个独立的虚拟文件,其中包含了原始文件的信息以及位置。但是两者就根本而言是同一个文件。更通俗的说,就是一个文件更名了,实际上是同一文件。这里需要注意:

  • 原始文件必须已经存在
  • 如果原始文件已删除,那已经创建的硬链接不会被删除
  • 修改硬链接文件内容,原始文件内容也会被修改
  • 删除硬链接文件,原始文件仍然存在

3.2 命令参数

$ ln  原始文件 硬链接文件

3.3 示例说明

1、创建一个硬链接

(1)创建一个名为2.py的原始文件

$ vim 2.py 
2222222222222222222
4444444444444444444

(2)创建名为hard_1.py的硬链接文件

$ ln 2.py hard_2.py

创建名为hard_1.py的软链接文件

说明:上面的2代表两个文件名

(3)查看硬链接文件内容

$ cat hard_2.py 
2222222222222222222
4444444444444444444

2、模拟只删除原始文件,不删除硬链接文件

(1)创建一个名为2.py的原始文件

$ vim 2.py 
2222222222222222222
4444444444444444444

(2)创建名为hard_2.py的硬链接文件

$ ln 2.py hard_2.py

(3)删除名为2.py的原始文件

$ rm 2.py -f

(4)再次查看硬链接文件

$ cat hard_2.py 
2222222222222222222
4444444444444444444

说明:如果原始文件已删除,那已经创建的硬链接文件依旧存在

3、修改硬链接文件内容,查看原始文件内容是否也会被修改

(1)创建一个名为2.py的原始文件

$ vim 2.py 
2222222222222222222
4444444444444444444

(2)创建名为hard_2.py的硬链接文件

$ ln 2.py hard_2.py

(3)修改hard_2.py硬链接文件

$ vim hard_2.py 
2222222222222222222
4444444444444444444
5555555555555555555

(4)查看名为2.py的原始文件

$ cat 2.py 
2222222222222222222
4444444444444444444
5555555555555555555

说明:修改硬链接文件内容,原始文件内容也会被修改

4、删除硬链接文件,查看原始文件内容是否也会被删除

(1)创建一个名为2.py的原始文件

$ vim 2.py 
2222222222222222222
4444444444444444444

(2)创建名为hard_2.py的硬链接文件

$ ln 2.py hard_2.py

(3)删除hard_2.py硬链接文件

$ rm hard_2.py -y

(4)查看原始文件

$ cat 2.py 
2222222222222222222
4444444444444444444

说明:删除软链接文件,原始文件仍然存在

四、区别

从定义上进行区别:

  • 软链接(符号链接):类似于windows快捷方式,存放源文件位置
  • 硬链接:同一个分区中inode号码相同的文件,互为硬链接

从创建方式上进行区别:

  • 软连接通过ln -s命令进行创建
  • 硬链接通过ln命令进行创建

从特点上进行区别:

  • 软件连接是比较常用的,可以给文件,目录创建
  • 硬链接只能给文件创建,不能跨分区,无法给目录创建硬链接,较少使用

从删除上进行区别:

  • 删除软连接,源文件不受影响
  • 删除源文件,软连接无法使用,红底白字闪烁
  • 删除硬链接,源文件,软连接无影响
  • 删除源文件和硬链接,这个文件就被删除了

五、总结

硬链接和软链接基本介绍已经完毕,下面再从图片的方式对比一下二者的区别:

软链接VS硬链接