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 目录快捷访问 跨目录共享程序 / 配置