锐安盾-网站安全加速服务

中国站

联系我们

400-002-9968

售前咨询

售后服务

注册 登录

博客 > Linux 知识:Linux 中的硬链接和符号链接

Linux 知识:Linux 中的硬链接和符号链接

  • 标签:
  • Linux
  • 硬链接
  • 软链接
  • 符号链接

浏览量:690次评论:0次

作者:锐成网络整理时间:2024-07-22 17:38:10

类似 Windows 系统中的快捷方式,在 Linux 系统中它们叫链接,存在两种形式 ,一种是硬链接,一种是符号链接。通常,符号链接也被称为软链接,下面我们就介绍一下这两种链接。

Linux 知识:Linux 中的硬链接和符号链接

一、硬链接

由于 Linux 下的文件是通过索引节点(Inode)来识别文件,在 Linux 的文件系统 中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,称为索引节点号。硬链接就是指向同一个索引节点 inode 的链接,而一个 inode 节点可以存在任意数目的硬链接。在删除硬链接时,inode 节点上的数据并不会被删除。所以,要删除存在硬链接的文件的数据,除了删除文件本身,还必须删除该文件所有的硬链接。

举例说明:

首先我们通过 touch命令 来创建一个文件 a.txt,然后通过 ln命令 创建 a.txt 的硬链接 a-link.txt,之后通过 ls命令 查看这两个文件的 inode 值,你会发现其 inode 值是一样的,命令如下:

[root@localhost~]# touch a.txt

[root@localhost~]# ln a.txt a-link.txt

[root@localhost~]# ls -i a.txt a-link.txt

ls -li 命令执行后,你会看到如下内容:

400746 -rw-r--r-- 2 root root        0 6月  18 06:47 a-link.txt

400746 -rw-r--r-- 2 root root        0 6月  18 06:47 a.txt

第一列 400746 就是 inode 值,两个文件的 inode 值是一致的,第三列是该文件存在的硬链接数,可以看到 a.txt 和 a-link.txt 显示都是 2。这里需要注意,在 Linux 系统中硬链接和源文件是无法区别的,两个文件具有相同的大小、创建时间等信息。其实它们就是拥有相同 inode 的文件,可以看成就是同一个文件,只是文件名不同。这时候我们删掉文件 a.txt,看一下 inode 值是否依旧存在:

[root@localhost~]# rm a.txt

[root@localhost~]# ls -i a-link.txt

输出结果:

400746 a-link.txt

这时我们会看到,硬链接文件指向的 inode 值没有变化,依旧是400746。即便删除原来的 a.txt,也不会引起该文件指向的 inode 值发生变化。所以,要删除存在硬链接文件,必须删除该文件及该文件存在的所有硬链接,这时才会真的删除该文件数据。

需要注意:

1、只有文件才可以创建硬链接,目录不可以创建。

2、硬链接只能在同一文件系统中文件创建,不能跨文件系统。

二、符号链接(软链接)

在 Linux 系统中,符号链接的使用更广泛。与硬链接不同,符号链接是一种专门的文件类型,符号链接通过文件名称来指向另一个文件,所以它不像硬链接一样和源文件有相同的inode值。符号链接的删除,并不影响源文件,但源文件删除后,符号链接就会失效。

举例说明:

首先,我们通过 touch命令 创建 b.txt 文件,之后通过 ln -s 命令来创建 b.txt 的软链接文件。

[root@localhost~]# touch b.txt

[root@localhost~]# ln -s b.txt b-link.txt

之后,我们通过 ls -li 命令来查看创建的文件,你会看到如下内容:

[root@localhost ~]# ls -li

400749 lrwxrwxrwx 1 root root     5 6月  18 08:06 b-link.txt -> b.txt

400748 -rw-r--r-- 1 root root       0 6月  18 08:06 b.txt

从结果上可以看出,两个文件的第一列 inode 值是不一样的,这说明符号链接和其指向的文件并不相同,而且从结果中可以很明确的看出 b-link.txt 是指向 b.txt 文件的,这点比硬链接直观。我们来删除掉 b.txt 文件,验证一下符号链接文件是否有效:

[root@localhost~]# rm b.txt

[root@localhost~]# cat b-link.txt

cat: b-link.txt: 没有那个文件或目录从上面的结果可以看出,删除 b.txt 源文件后,再查看 b-link.txt 文件,就会提示“没有那个文件或目录”,说明此时的符号链接文件 b-link.txt 已经无效了。通过上面对硬链接和符号链接的介绍,大致可以归纳为以下对比:

特点

硬链接

符号链接

名称解析

较快,因为硬链接中包含对链接对象的直接引用。

较慢,符号链接包含链接对象的路径,因此,必须解析路径名称才可以找到链接的对象。

链接对象

链接对象必须存在才可以创建硬链接。

链接对象不一定存在,不存在一样可以创建符号链接文件。

是否要求同一文件系统

要求在同一个文件系统中。

不要求,符号链接可以跨越不同的文件系统。

删除链接对象的要求

只有删除所有的硬链接才相当于删除文件。

无要求,删除链接对象后,使用符号链接会给出错错误提示。

写在最后

通过本文,我们初步了解了硬链接和符号链接的区别。

Linux系统中,符号链接比硬链接灵活很多,符号链接可以给任何类型文件系统中的文件创建符号链接,而硬链接不可以,符号链接可以很直观的看出那个是链接,那个是源文件,而硬件链接你分辨不出。

重要声明:本文来自Linux265,经授权转载,版权归原作者所有,不代表锐成观点,转载的目的在于传递更多知识和信息。

我的评论

还未登录?点击登录

微信扫码沟通
微信扫码沟通

微信扫码沟通

售前咨询
合作
售后
return head