searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

硬链接(Hard Links)和软链接(Symbolic Links,也称为符号链接)

2024-06-17 04:08:57
9
0

硬链接(Hard Links)和软链接(Symbolic Links,也称为符号链接)是两种在文件系统中创建文件链接的不同方法:

(在Linux的文件系统中,文件都会得到系统分配的一个编号,称为索引节点号inode)

链接的类型:

软链接:

软连接(也称符号链接)是指在不同的文件系统之间,将一个文件名关联到另一个文件上,使得该文件名也可以访问该文件。软链接与原文件不共享inode,它们有不同的inode号和device号。因此,对于软链接和原文件来说,它们的访问权限、所有者、大小等属性可能不同。

软连接的符号文件实际上是一个文本文件,存储另一文件的位置信息。

文件和目录都可以创建软链接。

硬链接:

硬连接是指通过索引节点来进行连接,只有文件能建立硬链接,目录不可以。

在Linux中,多个文件名指向同一索引节点是存在的,一般这种连接就是硬连接。硬连接的作用类似于复制多份文件,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放

跨文件系统:

硬链接:因为硬链接与inode相关,不同文件系统不会关联inode,所以只能在同一文件系统内创建硬链接,
软链接:软链接可以跨越文件系统

文件类型:

硬链接:支持链接到文件,不支持链接到目录。
软链接:支持链接到文件或目录,也支持链接到其它软链接。

大小和性能:

硬链接:硬链接共享相同的inode和磁盘块,硬链接几乎没有大小。
软链接:软链接的大小通常比硬链接大,因为它们需要存储目标路径等基础信息。软链接访问时,需要解析原文件信息,可能会有少量的性能开销。

修改和权限:

硬链接:硬链接的修改会反映在所有硬链接上,因为它们都共享相同的inode。硬链接之间没有权限区别。
软链接:软链接的修改不会影响目标文件或目录,因为它们只是指向目标的路径。软链接和目标之间可能具有不同的权限设置。

用途:

硬链接:常用于备份工具和版本控制系统,可以减少磁盘占用。
软链接:常用于创建快捷方式或引用其他位置的文件或目录,也支持跨文件系统的链接。

 

实际操作

[root@~ mnt]# touch file

[root@~ mnt]# echo 123456789qwertyuiopasdfhjkl;zxcvn > file

123456789qwertyuiopasdfhjkl

-bash: zxcvn: command not found

[root@~ mnt]# echo 123456789qwertyuiopasdfhjklzxcvn > file

[root@~ mnt]# cat file

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# ll -li file

4398051783917 -rw-r----- 1 root root 33 Jun 14 21:23 file

创建2个软链接:

[root@~ mnt]# ln -s file file-soft

[root@~ mnt]# ll -li file

4398051783917 -rw-r----- 1 root root 33 Jun 14 21:23 file

[root@~ mnt]# ll -li file-soft

4398051783918 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft -> file

[root@~ mnt]# ln -s file file-soft-01

创建4个硬链接:

[root@~ mnt]# ln file file-hard-01

[root@~ mnt]# ln file file-hard-02

[root@~ mnt]# ln file file-hard-03

[root@~ mnt]# ln file file-hard-04

查看文件信息,可以观察到硬链接和原文件拥有相同的inode编号及权限信息,软链接的inode编号和权限与原文件不同,拥有独立的inode编号和权限;

[root@~ mnt]# ll -li file*

4398051783917 -rw-r----- 5 root root 33 Jun 14 21:24 file

4398051783917 -rw-r----- 5 root root 33 Jun 14 21:24 file-hard-01

4398051783917 -rw-r----- 5 root root 33 Jun 14 21:24 file-hard-02

4398051783917 -rw-r----- 5 root root 33 Jun 14 21:24 file-hard-03

4398051783917 -rw-r----- 5 root root 33 Jun 14 21:24 file-hard-04

4398051783918 lrwxrwxrwx 1 root root  4 Jun 14 21:24 file-soft -> file

4398051783919 lrwxrwxrwx 1 root root  4 Jun 14 21:24 file-soft-01 -> file

[root@~ mnt]# cat file

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-hard-01

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-hard-02

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-hard-03

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-hard-04

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-soft

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-soft-01

123456789qwertyuiopasdfhjklzxcvn

原文件内容变更后,软链接文件和硬链接文件的内容也同步发生了变更:

[root@~ mnt]# echo 123456 > file

[root@~ mnt]# cat file

123456

[root@~ mnt]# cat file-hard-01

123456

[root@~ mnt]# cat file-hard-02

123456

[root@~ mnt]# cat file-hard-03

123456

[root@~ mnt]# cat file-hard-04

123456

[root@~ mnt]# cat file-soft

123456

[root@~ mnt]# cat file-soft-01

123456

软链接文件内容变更后,原文件和硬链接文件的内容也同步发生了变更:

[root@~ mnt]# echo 123 > file-soft-01

[root@~ mnt]# cat file-soft-01

123

[root@~ mnt]# cat file-soft

123

[root@~ mnt]# cat file

123

[root@~ mnt]# cat  file-hard-01

123

[root@~ mnt]# cat file-hard-02

123

[root@~ mnt]# cat file-hard-03

123

[root@~ mnt]# cat file-hard-04

123

[root@~ mnt]# ll -li file*

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:28 file

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:28 file-hard-01

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:28 file-hard-02

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:28 file-hard-03

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:28 file-hard-04

4398051783918 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft -> file

4398051783919 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft-01 -> file

原文件内容变更后,软链接文件和硬链接文件的内容也同步发生了变更:

[root@~ mnt]# echo 456 > file

[root@~ mnt]# cat file

456

[root@~ mnt]# cat file-hard-01

456

[root@~ mnt]# cat file-hard-02

456

[root@~ mnt]# cat file-hard-03

456

[root@~ mnt]# cat file-hard-04

456

[root@~ mnt]# cat file-soft

456

[root@~ mnt]# cat file-soft-01

456

删除其中一个软链接:

[root@~ mnt]# rm -fr file-soft-01

[root@~ mnt]# ll -li file*

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:29 file

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:29 file-hard-01

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:29 file-hard-02

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:29 file-hard-03

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:29 file-hard-04

4398051783918 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft -> file

删除一个硬链接:

[root@~ mnt]# rm -fr file-hard-04

[root@~ mnt]# ll -li file*

4398051783917 -rw-r----- 4 root root 4 Jun 14 21:29 file

4398051783917 -rw-r----- 4 root root 4 Jun 14 21:29 file-hard-01

4398051783917 -rw-r----- 4 root root 4 Jun 14 21:29 file-hard-02

4398051783917 -rw-r----- 4 root root 4 Jun 14 21:29 file-hard-03

4398051783918 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft -> file

删除原文件后,软链接找不到源文件报错,硬链接依然可以使用。

[root@~ mnt]# rm -fr file

[root@~ mnt]# ll -li file*

4398051783917 -rw-r----- 3 root root 4 Jun 14 21:29 file-hard-01

4398051783917 -rw-r----- 3 root root 4 Jun 14 21:29 file-hard-02

4398051783917 -rw-r----- 3 root root 4 Jun 14 21:29 file-hard-03

4398051783918 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft -> file

[root@~ mnt]#cat file-soft
cat: file-soft: No such file or directory

[root@~ mnt]# cat file-hard-01

456

[root@~ mnt]# cat file-hard-03

456

[root@~ mnt]# cat file-hard-02

456

变更硬链接内容后,其它硬链接的内容也同时发生变化。 

[root@~ mnt]# echo 789 > file-hard-01

[root@~ mnt]# cat file-hard-01

789

[root@~ mnt]# cat file-hard-02

789

[root@~ mnt]# cat file-hard-03

789

0条评论
0 / 1000
w****n
8文章数
1粉丝数
w****n
8 文章 | 1 粉丝
原创

硬链接(Hard Links)和软链接(Symbolic Links,也称为符号链接)

2024-06-17 04:08:57
9
0

硬链接(Hard Links)和软链接(Symbolic Links,也称为符号链接)是两种在文件系统中创建文件链接的不同方法:

(在Linux的文件系统中,文件都会得到系统分配的一个编号,称为索引节点号inode)

链接的类型:

软链接:

软连接(也称符号链接)是指在不同的文件系统之间,将一个文件名关联到另一个文件上,使得该文件名也可以访问该文件。软链接与原文件不共享inode,它们有不同的inode号和device号。因此,对于软链接和原文件来说,它们的访问权限、所有者、大小等属性可能不同。

软连接的符号文件实际上是一个文本文件,存储另一文件的位置信息。

文件和目录都可以创建软链接。

硬链接:

硬连接是指通过索引节点来进行连接,只有文件能建立硬链接,目录不可以。

在Linux中,多个文件名指向同一索引节点是存在的,一般这种连接就是硬连接。硬连接的作用类似于复制多份文件,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放

跨文件系统:

硬链接:因为硬链接与inode相关,不同文件系统不会关联inode,所以只能在同一文件系统内创建硬链接,
软链接:软链接可以跨越文件系统

文件类型:

硬链接:支持链接到文件,不支持链接到目录。
软链接:支持链接到文件或目录,也支持链接到其它软链接。

大小和性能:

硬链接:硬链接共享相同的inode和磁盘块,硬链接几乎没有大小。
软链接:软链接的大小通常比硬链接大,因为它们需要存储目标路径等基础信息。软链接访问时,需要解析原文件信息,可能会有少量的性能开销。

修改和权限:

硬链接:硬链接的修改会反映在所有硬链接上,因为它们都共享相同的inode。硬链接之间没有权限区别。
软链接:软链接的修改不会影响目标文件或目录,因为它们只是指向目标的路径。软链接和目标之间可能具有不同的权限设置。

用途:

硬链接:常用于备份工具和版本控制系统,可以减少磁盘占用。
软链接:常用于创建快捷方式或引用其他位置的文件或目录,也支持跨文件系统的链接。

 

实际操作

[root@~ mnt]# touch file

[root@~ mnt]# echo 123456789qwertyuiopasdfhjkl;zxcvn > file

123456789qwertyuiopasdfhjkl

-bash: zxcvn: command not found

[root@~ mnt]# echo 123456789qwertyuiopasdfhjklzxcvn > file

[root@~ mnt]# cat file

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# ll -li file

4398051783917 -rw-r----- 1 root root 33 Jun 14 21:23 file

创建2个软链接:

[root@~ mnt]# ln -s file file-soft

[root@~ mnt]# ll -li file

4398051783917 -rw-r----- 1 root root 33 Jun 14 21:23 file

[root@~ mnt]# ll -li file-soft

4398051783918 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft -> file

[root@~ mnt]# ln -s file file-soft-01

创建4个硬链接:

[root@~ mnt]# ln file file-hard-01

[root@~ mnt]# ln file file-hard-02

[root@~ mnt]# ln file file-hard-03

[root@~ mnt]# ln file file-hard-04

查看文件信息,可以观察到硬链接和原文件拥有相同的inode编号及权限信息,软链接的inode编号和权限与原文件不同,拥有独立的inode编号和权限;

[root@~ mnt]# ll -li file*

4398051783917 -rw-r----- 5 root root 33 Jun 14 21:24 file

4398051783917 -rw-r----- 5 root root 33 Jun 14 21:24 file-hard-01

4398051783917 -rw-r----- 5 root root 33 Jun 14 21:24 file-hard-02

4398051783917 -rw-r----- 5 root root 33 Jun 14 21:24 file-hard-03

4398051783917 -rw-r----- 5 root root 33 Jun 14 21:24 file-hard-04

4398051783918 lrwxrwxrwx 1 root root  4 Jun 14 21:24 file-soft -> file

4398051783919 lrwxrwxrwx 1 root root  4 Jun 14 21:24 file-soft-01 -> file

[root@~ mnt]# cat file

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-hard-01

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-hard-02

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-hard-03

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-hard-04

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-soft

123456789qwertyuiopasdfhjklzxcvn

[root@~ mnt]# cat file-soft-01

123456789qwertyuiopasdfhjklzxcvn

原文件内容变更后,软链接文件和硬链接文件的内容也同步发生了变更:

[root@~ mnt]# echo 123456 > file

[root@~ mnt]# cat file

123456

[root@~ mnt]# cat file-hard-01

123456

[root@~ mnt]# cat file-hard-02

123456

[root@~ mnt]# cat file-hard-03

123456

[root@~ mnt]# cat file-hard-04

123456

[root@~ mnt]# cat file-soft

123456

[root@~ mnt]# cat file-soft-01

123456

软链接文件内容变更后,原文件和硬链接文件的内容也同步发生了变更:

[root@~ mnt]# echo 123 > file-soft-01

[root@~ mnt]# cat file-soft-01

123

[root@~ mnt]# cat file-soft

123

[root@~ mnt]# cat file

123

[root@~ mnt]# cat  file-hard-01

123

[root@~ mnt]# cat file-hard-02

123

[root@~ mnt]# cat file-hard-03

123

[root@~ mnt]# cat file-hard-04

123

[root@~ mnt]# ll -li file*

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:28 file

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:28 file-hard-01

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:28 file-hard-02

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:28 file-hard-03

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:28 file-hard-04

4398051783918 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft -> file

4398051783919 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft-01 -> file

原文件内容变更后,软链接文件和硬链接文件的内容也同步发生了变更:

[root@~ mnt]# echo 456 > file

[root@~ mnt]# cat file

456

[root@~ mnt]# cat file-hard-01

456

[root@~ mnt]# cat file-hard-02

456

[root@~ mnt]# cat file-hard-03

456

[root@~ mnt]# cat file-hard-04

456

[root@~ mnt]# cat file-soft

456

[root@~ mnt]# cat file-soft-01

456

删除其中一个软链接:

[root@~ mnt]# rm -fr file-soft-01

[root@~ mnt]# ll -li file*

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:29 file

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:29 file-hard-01

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:29 file-hard-02

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:29 file-hard-03

4398051783917 -rw-r----- 5 root root 4 Jun 14 21:29 file-hard-04

4398051783918 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft -> file

删除一个硬链接:

[root@~ mnt]# rm -fr file-hard-04

[root@~ mnt]# ll -li file*

4398051783917 -rw-r----- 4 root root 4 Jun 14 21:29 file

4398051783917 -rw-r----- 4 root root 4 Jun 14 21:29 file-hard-01

4398051783917 -rw-r----- 4 root root 4 Jun 14 21:29 file-hard-02

4398051783917 -rw-r----- 4 root root 4 Jun 14 21:29 file-hard-03

4398051783918 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft -> file

删除原文件后,软链接找不到源文件报错,硬链接依然可以使用。

[root@~ mnt]# rm -fr file

[root@~ mnt]# ll -li file*

4398051783917 -rw-r----- 3 root root 4 Jun 14 21:29 file-hard-01

4398051783917 -rw-r----- 3 root root 4 Jun 14 21:29 file-hard-02

4398051783917 -rw-r----- 3 root root 4 Jun 14 21:29 file-hard-03

4398051783918 lrwxrwxrwx 1 root root 4 Jun 14 21:24 file-soft -> file

[root@~ mnt]#cat file-soft
cat: file-soft: No such file or directory

[root@~ mnt]# cat file-hard-01

456

[root@~ mnt]# cat file-hard-03

456

[root@~ mnt]# cat file-hard-02

456

变更硬链接内容后,其它硬链接的内容也同时发生变化。 

[root@~ mnt]# echo 789 > file-hard-01

[root@~ mnt]# cat file-hard-01

789

[root@~ mnt]# cat file-hard-02

789

[root@~ mnt]# cat file-hard-03

789

文章来自个人专栏
存储底座
8 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0