软连接与硬连接

链接是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件。

链接无非是把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。

对链接进行编辑,实际上是对原始文件进行编辑。

硬链接

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

使用:

1
ln [源文件] [目标文件]

示例:

1
2
3
4
5
6
7
8
9
10
11
# 创建一个测试文件 test.txt
[root@hadoop-centos-01 test]# echo "Make deserts bloom" > text.txt
[root@hadoop-centos-01 test]# ls
text.txt

# 以 text.txt 为源创建一个硬连接 text.txt.hard
[root@hadoop-centos-01 test]# ln text.txt text.txt.hard
[root@hadoop-centos-01 test]# ls -li
total 8
51936935 -rw-r--r--. 2 root root 19 Aug 14 06:43 text.txt
51936935 -rw-r--r--. 2 root root 19 Aug 14 06:43 text.txt.hard

注意事项:

  1. 修改源文件或者目标文件, 对应另外一个文件也会发生相应修改;
  2. 删除源文件或者目标文件, 对另外一个文件没有影响;
  3. 硬链接文件不占用存储空间;
  4. 不能对目录文件进行创建硬链接操作;
  5. 硬链接文件不能跨文件系统。

软链接

软链接也称之为符号连接(Symbolic Link)。

软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。其包含了另一文件的位置信息。

使用:

1
ln -s [源文件或目录]  [目标文件或目录]

示例:

1
2
3
4
5
6
[root@hadoop-centos-01 test]# ln -s text.txt text.txt.soft
[root@hadoop-centos-01 test]# ll -i
total 8
51936935 -rw-r--r--. 2 root root 19 Aug 14 06:43 text.txt
51936935 -rw-r--r--. 2 root root 19 Aug 14 06:43 text.txt.hard # test.txt 的硬链接
51936939 lrwxrwxrwx. 1 root root 8 Aug 14 06:51 text.txt.soft -> text.txt # test.txt 的软链接

硬链接与软链接的区别

在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号inode 。

软连接,其实就是新建立一个文件,这个文件就是专门用来指向别的文件的,类似于windows 下的快捷方式。删了这个软连接文件,不影响其指向的实体文件,但如果删除其指向的实体文件,则该软链接不可用。

硬连接,不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个inode,当然inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除的时候,系统调用会检查inode link count的数值,如果他大于等于1,那么inode不会被回收。因此文件的内容不会被删除。

创建硬链接实际上是为原文件在储存器中的资源再新建一个入口,所以硬链接和原文件指向的其实是储存器中的同一处资源(可以理解为硬链接和原文件就是同一个文件)。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。

软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vi这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);

软链接可以对目录进行连接,硬链接不可以。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建软链接。

参考:

https://baike.baidu.com/item/%E7%A1%AC%E9%93%BE%E6%8E%A5

-------------本文结束感谢您的阅读-------------