Linux 文件系统最重要的特点之一是它的文件链接。链接是对文件的引用,这样可以让文件在文件系统中多处被看到。不过,在 Linux 中,链接可以如同原始文件一样来对待。链接可以与普通的文件一样被执行、编辑和访问。对系统中的其他应用程序而言,链接就是它所对应的原始文件。当您通过链接对文件进行编辑时,您编辑的实际上是原始文件。链接不是副本,linux有两种类型的链接:硬链接和符号链接(软链接)。

硬链接(hard link)只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为 inode)。当您移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。

另外一种链接称之为符号链接(Symbolic Link),也叫软链接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在软链接中,文件实际上是一个文本文件,其中包含有另一文件的位置信息,如果删了这个软链接文件,那就等于不需要这个链接,和原来存在的实体原文件没有任何关系,但删除原来的文件,则相应的软连接也不可用。

创建硬链接:ln filename 【linkname】

创建软链接:ln -s filename 【linkname】

[root@liang opt]# touch aa     #创建文件aa
[root@liang opt]# ln aa bb     #创建aa的硬链接bb
[root@liang opt]# ln -s aa cc    #创建aa的软链接cc
[root@liang opt]# ll -i        #查看结果及inode值
总用量 0
2490370 -rw-r--r--. 2 root root 0 7月  30 04:36 aa
2490370 -rw-r--r--. 2 root root 0 7月  30 04:36 bb
2490371 lrwxrwxrwx. 1 root root 2 7月  30 04:36 cc -> aa
[root@liang opt]# ln ../opt/aa /boot/dd     #跨文件系统创建aa的硬链接dd,有报错信息
ln: 创建硬链接"/boot/dd" => "../opt/aa": 无效的跨设备连接
[root@liang opt]# ln -s ../opt/aa /boot/ee    #跨文件系统创建aa的软链接ee,无报错信息
[root@liang opt]# ll -i /boot/      #查看结果及inode值
  39 lrwxrwxrwx. 1 root root        9 7月  30 04:37 ee -> ../opt/aa
[root@liang opt]# ln ff gg      #为不存在的ff创建硬链接gg,有报错信息
ln: 正在访问"ff": 没有那个文件或目录
[root@liang opt]# ln -s ff hh     #为不存在的ff创建软链接hh,无报错信息
[root@liang opt]# ll -i      #查看结果及inode值
总用量 0
2490370 -rw-r--r--. 2 root root 0 7月  30 04:36 aa
2490370 -rw-r--r--. 2 root root 0 7月  30 04:36 bb
2490371 lrwxrwxrwx. 1 root root 2 7月  30 04:36 cc -> aa
2490373 lrwxrwxrwx. 1 root root 2 7月  30 04:37 hh -> ff
[root@liang opt]# echo aaaaaaaaaa > aa    #在aa文件中写入内容
[root@liang opt]# cat aa       #查看源文件aa的内容
aaaaaaaaaa
[root@liang opt]# cat bb       #查看硬链接bb的内容
aaaaaaaaaa
[root@liang opt]# cat cc       #查看软链接cc的内容
aaaaaaaaaa
[root@liang opt]# rm -f aa     #删除源文件aa
[root@liang opt]# cat bb       #删除源文件aa后查看硬链接bb的内容
aaaaaaaaaa
[root@liang opt]# cat cc       #删除源文件cc后查看软链接cc的内容
cat: cc: 没有那个文件或目录
[root@liang opt]# ll -i        #删除源文件后查看链接结果及inode值
总用量 4
2490370 -rw-r--r--. 1 root root 11 7月  30 04:45 bb
2490371 lrwxrwxrwx. 1 root root  2 7月  30 04:36 cc -> aa
2490373 lrwxrwxrwx. 1 root root  2 7月  30 04:37 gg -> ff



从以上操作过程中可以看到硬链接文件与源文件的inode值一样,即硬链接文件与源文件同属一个数据块,软链接文件与源文件的inode值不一样,即软链接文件是单独存在的一个文本文件。当源文件被删除时,硬链接文件不受影响,而软链接文件则无效。

硬链接特性:

  • 文件有相同的 inode 及 data block;

  • 只能对已存在的文件进行创建;

  • 不能交叉文件系统进行硬链接的创建;

  • 不能对目录进行创建,只可对文件创建;

  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件;

软链接特性:

  • 软链接有自己的文件属性及权限等;

  • 可对不存在的文件或目录创建软链接;

  • 软链接可交叉文件系统;

  • 软链接可对文件或目录创建;

  • 创建软链接时,链接计数 i_nlink 不会增加;

  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接);

如下图所示软链接、硬链接及源文件的关系:

linux软链接与硬链接的区别_第1张图片