硬链接 和 软链接 是两种通过“别名”访问文件的机制,但本质和特性有显著区别。

1. 基本概念

  • 硬链接:给文件的inode(文件在文件系统中的唯一标识)新增一个“文件名”,多个硬链接指向同一个inode,本质上是同一个文件的不同名字。
  • 软链接:创建一个独立的文件(有自己的inode),其内容是指向目标文件的路径,类似 Windows 的“快捷方式”,也叫符号链接。
  • 参考:0、Linux 系统分区 - 文件系统原理部分
    在这里插入图片描述
    在这里插入图片描述

2. 创建命令

通过 ln 命令创建,区别在于是否加 -s 选项:

  • 硬链接:ln 目标文件 硬链接名
  • 软链接:ln -s 目标文件 软链接名

3. 核心区别与特性

特性硬链接软链接
本质指向同一个inode的多个文件名(同一文件)独立文件,内容是目标文件的路径(快捷方式)
inode与目标文件共享同一个inode;想知道一个文件的所有硬链接的位置,可以通过find / -inum inode号进行查找有自己独立的inode
文件类型与目标文件类型一致类型为 l(link),显示为“lrwxrwxrwx”
跨文件系统不支持(inode仅在同一文件系统内唯一)支持(通过路径指向,可跨分区/磁盘)
链接目录不支持(多数文件系统禁止,避免循环引用)支持(常用,如 /lib -> /usr/lib)
目标删除影响无影响(只要有一个硬链接存在,文件内容就一直在,只是名字变了)删除目标后,软链接失效(显示红色)
大小与目标文件大小相同(实际是同一文件)很小(仅存储目标路径的字符串长度,通常几字节)
权限与目标文件共享权限(修改任一链接权限会同步)权限为 lrwxrwxrwx(但实际访问权限由目标文件或目录决定)

4. 示例说明

假设当前目录有一个文件 /home/1.txt(内容为“hello”),分别创建硬链接和软链接:

a. 硬链接示例

# 创建硬链接
ln 1.txt hard_link

# 查看文件信息(ls -li 显示inode)
ls -li
# 输出(注意inode相同,都是67565683):
# 67565683 -rw-r--r-- 2 root root 6 Nov  4 11:29 hard_link
# 67565683 -rw-r--r-- 2 root root 6 Nov  4 11:29 1.txt
# (第二列的“2”表示硬链接数为2,如果是文件夹,这个数字代表的是子目录的个数)

# 修改硬链接内容,目标文件同步变化
echo "world" >> hard_link
cat 1.txt  # 输出:hello world(目标文件内容被修改)

# 删除目标文件,硬链接仍可正常访问
rm 1.txt
cat hard_link  # 仍能输出:hello world(因硬链接数仍为1,文件未删除)

在这里插入图片描述

b. 软链接示例

# 创建软链接
ln -s 1.txt soft_link

# 查看文件信息(ls -li 显示inode)
ls -li
# 输出(软链接有独立inode 789010,类型为l):
# 789010 lrwxrwxrwx 1 root root 6 Nov  4 11:39 soft_link -> 1.txt
# 67565683 -rw-r--r-- 2 root root 6 Nov  4 11:29 1.txt

# 通过软链接修改内容,目标文件同步变化
echo "linux" >> soft_link
cat 1.txt  # 输出:hello linux(目标文件被修改)

# 删除目标文件,软链接失效(断链)
rm 1.txt
ls -l soft_link  # 输出:789010 lrwxrwxrwx 1 root root 6 Nov  4 11:39 soft_link -> 1.txt(显示为红色)
cat soft_link    # 报错:cat: soft_link: 没有那个文件或目录

在这里插入图片描述

5. 使用场景

  • 硬链接适用场景:

    • 需要通过多个文件名访问同一文件(如重要配置文件,避免误删);
    • 希望文件被彻底删除前必须删除所有链接(增强安全性)。
    • 注意:不能链接目录,不能跨分区跨文件系统。
  • 软链接适用场景:

    • 替代长路径(如 ln -s /usr/local/nginx/conf/ nginx_conf,简化访问);
    • 链接目录(如 /var/www -> /home/user/www,统一网站根目录);
    • 跨文件系统访问文件(如链接其他分区的文件);
    • 软件版本管理(如 python -> python3.9,方便切换版本,发布回滚)。

总结

  • 硬链接是“同一文件的多个名字”,依赖inode,不支持目录和跨文件系统,目标删除不影响;
  • 软链接是“指向路径的快捷方式”,有独立inode,支持目录和跨文件系统,目标删除会失效。

根据需求选择:需稳定共享文件用硬链接,需灵活快捷访问用软链接。

更多推荐