Linux系统中,如何区分软连接和硬连接?
摘要:软连接概述 软连接类似Windows中的快捷方式,本身是一个独立文件,有自己的inode,内容只是指向另一个文件的路径字符串。 其特点如下: 可以跨文件系统、跨分区、跨磁盘 可以链接目录 源文件删除后,软链接变成死链接(失效) 软链接大小
软连接概述
软连接类似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
目录快捷访问
跨目录共享程序 / 配置
