Linux软硬链接详解

Linux-FileSystem-SymbolicHardLink

1. 概述

1.1 软链接(符号链接)

  • 类比:类似于Windows中的快捷方式。
  • 本质:是一个特殊文件,内容为源文件的路径(位置+文件名)。
  • 特点
    • 可跨文件系统/分区。
    • 可对文件和目录创建。
    • 源文件删除后,软链接失效(显示红底白字闪烁)。

1.2 硬链接

  • 本质:同一分区中多个文件名指向同一个inode,互为硬链接。
  • 特点
    • 仅限文件,不能对目录创建。
    • 不能跨分区。
    • 删除硬链接或源文件不影响其他硬链接。

2. 创建方法

2.1 软链接创建

1
ln -s 源文件 软链接文件名

示例

1
2
3
4
# 创建源文件
touch xiao.txt
# 创建软链接
ln -s xiao.txt xiao_soft

绝对路径软链接

1
ln -s /path/to/source /path/to/link

2.2 硬链接创建

1
ln 源文件 硬链接文件名

示例

1
ln xiao.txt xiao_hard

3. 核心区别

特性 软链接 硬链接
本质 存储源文件路径的独立文件 与源文件共享inode的多个文件名
跨分区 支持 不支持
目录支持 支持 不支持
源文件删除 软链接失效(红底白字闪烁) 不影响其他硬链接
文件大小 软链接文件大小=路径字符长度 硬链接与源文件大小相同
inode号 与源文件不同 与源文件相同

4. 使用场景

4.1 软链接适用场景

  • 需要跨分区或文件系统引用文件/目录。
  • 为目录创建快捷访问路径。
  • 动态链接库文件(如/usr/lib中的库文件)。

4.2 硬链接适用场景

  • 需要多个文件名指向同一文件数据(如备份或日志轮转)。
  • 确保文件删除后数据仍可通过其他硬链接访问。

5. 注意事项

  1. 软链接路径
    • 推荐使用绝对路径,避免移动源文件后链接失效。
  2. 硬链接限制
    • 不能对目录或跨分区文件创建硬链接。
  3. 删除影响
    • 删除软链接:rm 软链接名(不影响源文件)。
    • 删除硬链接:仅减少inode引用计数,数据未真正删除直至所有硬链接被移除。

6. 示例验证

6.1 软链接操作

1
2
3
4
5
6
7
8
9
# 创建源文件并写入内容
echo "Hello" > source.txt
# 创建软链接
ln -s source.txt soft_link
# 通过软链接查看内容
cat soft_link # 输出: Hello
# 删除源文件后验证
rm source.txt
cat soft_link # 提示"无效文件",链接闪烁

6.2 硬链接操作

1
2
3
4
5
6
7
8
# 创建硬链接
ln source.txt hard_link
# 查看inode号(相同)
ls -i source.txt hard_link
# 修改硬链接内容
echo "World" >> hard_link
# 源文件同步更新
cat source.txt # 输出: Hello\nWorld