Linux 链接类型详解

在 Linux 系统中,存在两种主要的链接类型:硬链接(Hard Link)和软链接(符号链接,Symbolic Link)。这两种链接方式在文件系统中的作用和实现方式有所不同。

1. 硬链接(Hard Link)

硬链接可以将其理解为一个指向原始文件 inode 的指针,系统不会为它分配独立的 inode 和文件数据。原始文件和硬链接文件实际上是同一个文件,只是名字不同。

特点:

  • 硬链接与原始文件共享同一个 inode。
  • 每创建一个硬链接,该文件的 inode 链接数就会增加 1。
  • 只有当文件的 inode 链接数为 0 时,文件才会被删除。
  • 硬链接可以理解为文件副本,但不占用额外的硬盘空间。
  • 硬链接不能跨文件系统创建。
  • 不能为目录创建硬链接。

示例操作:
在 CentOS 中,创建硬链接的命令为 ln

[root@centos ~]# echo "Welcome to CentOS" > original.txt
[root@centos ~]# ln original.txt hardlink.txt
[root@centos ~]# ls -l original.txt hardlink.txt
-rw-r--r-- 2 root root 17 Mar 10 12:00 hardlink.txt
-rw-r--r-- 2 root root 17 Mar 10 12:00 original.txt
[root@centos ~]# rm original.txt
[root@centos ~]# cat hardlink.txt
Welcome to CentOS

上述操作中,删除 original.txt 文件后,通过 hardlink.txt 仍然可以访问到原始文件的内容。

2. 软链接(符号链接,Symbolic Link)

软链接是一个包含所链接文件路径名的特殊文件,因此它能够链接目录文件,也可以跨文件系统进行链接。

特点:

  • 软链接存储的是指向原始文件路径的字符串。
  • 软链接可以对不存在的文件名进行链接。
  • 软链接可以跨文件系统进行链接。
  • 软链接可以链接目录。
  • 当原始文件被删除后,软链接将失效。

示例操作:
在 CentOS 中,创建软链接的命令为 ln -s

[root@centos ~]# echo "Hello from CentOS" > source.txt
[root@centos ~]# ln -s source.txt symlink.txt
[root@centos ~]# ls -l source.txt symlink.txt
-rw-r--r-- 1 root root 17 Mar 10 12:05 source.txt
lrwxrwxrwx 1 root root 10 Mar 10 12:05 symlink.txt -> source.txt
[root@centos ~]# cat symlink.txt
Hello from CentOS
[root@centos ~]# rm source.txt
[root@centos ~]# cat symlink.txt
cat: symlink.txt: No such file or directory

上述操作中,删除 source.txt 文件后,symlink.txt 链接失效,无法再访问原始文件的内容。

3. 链接命令详解

使用 ln 命令可以为文件创建一个链接。链接类型分为硬链接和软链接,默认的链接类型是硬链接。

  • 硬链接:

    ln source target  # 创建硬链接
  • 软链接:

    ln -s source target  # 创建软链接

4. 举例说明

为了更好地理解软链接和硬链接的不同特质,我们创建一个类似于 Windows 系统中快捷方式的软链接。

[root@centos ~]# echo "Welcome to CentOS" > readme.txt
[root@centos ~]# ln -s readme.txt readit.txt
[root@centos ~]# cat readit.txt
Welcome to CentOS
[root@centos ~]# rm readme.txt
[root@centos ~]# cat readit.txt
cat: readit.txt: No such file or directory

接下来对一个原始文件创建一个硬链接:

[root@centos ~]# echo "Welcome to CentOS" > readme.txt
[root@centos ~]# ln readme.txt readit.txt
[root@centos ~]# cat readit.txt
Welcome to CentOS
[root@centos ~]# rm readme.txt
[root@centos ~]# cat readit.txt
Welcome to CentOS

在上述示例中,删除 readme.txt 后,硬链接 readit.txt 仍然可以访问原始文件的内容,而软链接则不能。

本文由mdnice多平台发布


逼格高的汤圆
7 声望2 粉丝