Linux系统中的软连接和硬连接

软连接概述

软连接类似Windows中的快捷方式,本身是一个独立文件,有自己的inode,内容只是指向另一个文件的路径字符串。
其特点如下:

  • 可以跨文件系统、跨分区、跨磁盘
  • 可以链接目录
  • 源文件删除后,软链接变成死链接(失效)
  • 软链接大小 = 指向路径的字符串长度
  • 支持相对路径、绝对路径创建软连接

创建方式

ln -s 源文件 目标链接

示例:

# 相对路径创建软连接
root@master:/data00/tmp# ln -s sort.txt sort.txt.ln
# 查看
root@master:/data00/tmp# ll -i | grep sort
28573733 -rw-r--r-- 1 root  root    77 Apr 14 10:56 sort.txt
28573734 lrwxrwxrwx 1 root  root     8 Apr 14 11:05 sort.txt.ln -> sort.txt

# 通过上面可以看到,其inode不相同,文件大小不相同

当修改链接文件后,源文件会产生什么变化呢?

会发现两个文件都会同时修改

root@master:/data00/tmp# echo haha > sort.txt.ln 
root@master:/data00/tmp# cat sort.txt.ln 
haha
root@master:/data00/tmp# cat sort.txt
haha

当我们删除链接文件时,源文件会删除吗?

源文件不会删除,删除链接文件对源文件不会产生任何影响

root@master:/data00/tmp# rm -rf sort.txt.ln 
root@master:/data00/tmp# ll | grep sort.txt 
-rw-r--r-- 1 root  root     5 Apr 14 11:11 sort.txt
root@master:/data00/tmp# cat sort.txt 
haha

当删除源文件,会对链接文件产生什么影响呢?

发现链接文件失效

# 创建软连接
root@master:/data00/tmp# ln -s sort.txt sort.txt.ln
root@master:/data00/tmp# ll | grep sort.txt
-rw-r--r-- 1 root  root     5 Apr 14 11:11 sort.txt
lrwxrwxrwx 1 root  root     8 Apr 14 11:15 sort.txt.ln -> sort.txt
# 删除源文件
root@master:/data00/tmp# rm -rf sort.txt
root@master:/data00/tmp# ll | grep sort.txt.ln 
lrwxrwxrwx 1 root  root     8 Apr 14 11:15 sort.txt.ln -> sort.txt
# 查看源文件内容
root@master:/data00/tmp# cat sort.txt.ln 
cat: sort.txt.ln: No such file or directory

硬连接概述

在同一个磁盘分区中inode号码相同的文件,互为硬链接。
其特点如下:

  • 多个文件名直接指向同一个 inode
  • 所有硬链接地位完全平等,没有主次之分
  • 删除其中一个,文件本体不会消失,直到所有链接都被删除
  • 不能跨文件系统(不能跨分区、跨磁盘)
  • 不能链接目录(系统禁止,防止循环引用)
  • 不占用额外空间(只多一个目录项)
  • 源文件移动 / 改名后,链接依然有效
  • 只有链接数 link count 变为 0,文件才真正删除
  • 文件大小一致

创建方式

ln 源文件 目标链接

示例:

# 创建硬连接
root@master:/data00/tmp# ln uniq.txt uniq.txt.ln

# 可以看到inode完全一样,文件大小一样
root@master:/data00/tmp# ll -i | grep uniq.txt
28573736 -rw-r--r-- 2 root  root    96 Apr 14 10:58 uniq.txt
28573736 -rw-r--r-- 2 root  root    96 Apr 14 10:58 uniq.txt.ln

当修改硬连接文件后,源文件会修改吗?

会同时修改

root@master:/data00/tmp# echo hahaha > uniq.txt.ln 
root@master:/data00/tmp# cat uniq.txt
hahaha
root@master:/data00/tmp# cat uniq.txt.ln 
hahaha

删除源文件,硬连接会失效吗?

不会失效

root@master:/data00/tmp# rm -rf uniq.txt
root@master:/data00/tmp# cat uniq.txt.ln 
hahaha
root@master:/data00/tmp# ll -i | grep uniq.txt.ln 
28573736 -rw-r--r-- 1 root  root     7 Apr 14 11:39 uniq.txt.ln

软连接和硬连接区别

对比项 硬链接 软链接
本质 同一文件的多个名字 指向路径的快捷方式
是否有独立 inode 否,共用 是,独立
能否跨分区 不能
能否链接目录 不能
源文件删除后 依然可用 失效(红底闪烁)
占用空间 几乎不占 占少量(存路径)
支持相对 / 绝对 不关心 支持
适用场景 防误删、多路径访问 软件版本管理、快捷入口

常见使用场景

硬链接

  • 防止文件被误删(多入口备份)
  • 同一文件在多个目录使用,不占双倍空间

软链接

  • 软件版本切换:
ln -s python3.10 python
  • 目录快捷访问
  • 跨目录共享程序 / 配置
posted @ 2026-04-14 11:44  huangSir-devops  阅读(17)  评论(0)    收藏  举报
作者:你的名字
出处:你的博客链接
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。