目录
一、什么是软链接?
软链接(Symbolic Link)也称为符号链接,类似于 Windows 系统中的快捷方式。它是一个独立的文件,其内容是指向目标文件或目录的路径。通过软链接,我们可以在不同的位置访问同一个文件或目录,而无需复制文件。
1. 创建软链接
创建软链接的命令是 ln -s
,其中 -s
表示创建符号链接。语法如下:
ln -s <目标文件或目录> <软链接名称>
示例:
假设我们有一个文件 file_target1.txt
,我们想为它创建一个软链接 file_soft.link
。
touch file_target1.txt # 创建目标文件
ln -s file_target1.txt file_soft.link # 创建软链接
ll # 查看文件列表
输出结果:
从输出中可以看到,file_soft.link
是一个符号链接,指向 file_target1.txt
。
2. 软链接的特性
独立性:软链接是一个独立的文件,具有自己的 inode 编号。
路径依赖:软链接依赖于目标文件的路径。如果目标文件被移动或删除,软链接将失效。
示例:
删除目标文件后,软链接将失效。
rm file_target1.txt # 删除目标文件
ll # 查看文件列表
输出结果:
可以看到,file_soft.link
仍然存在,但它已经失效,因为目标文件 file_target1.txt
被删除了。
3. 软链接的用途
路径重定向:将文件或目录的访问路径重定向到另一个位置。
简化路径:通过软链接简化复杂路径,方便访问。
文件共享:在不同目录中共享同一个文件。
二、什么是硬链接?
硬链接(Hard Link)是指多个文件名指向同一个 inode(索引节点)。硬链接不是独立的文件,它与目标文件共享同一个 inode,因此它们实际上是同一个文件的不同入口。
1. 创建硬链接
创建硬链接的命令是 ln
,语法如下:
ln <目标文件> <硬链接名称>
示例:
假设我们有一个文件 file_target2.txt
,我们想为它创建一个硬链接 file_hard.link
。
touch file_target2.txt # 创建目标文件
ln file_target2.txt file_hard.link # 创建硬链接
ll # 查看文件列表
输出结果
从输出中可以看到,file_hard.link
和 file_target2.txt
的硬链接数都是 2,这表明它们共享同一个 inode。
2. 硬链接的特性
共享 inode:硬链接与目标文件共享同一个 inode,因此它们实际上是同一个文件。
路径独立:硬链接不依赖于目标文件的路径,即使目标文件被重命名或移动,硬链接仍然有效。
删除行为:删除一个硬链接不会影响其他硬链接或目标文件,只有当所有硬链接都被删除时,文件才会被真正删除。
示例:
删除一个硬链接,目标文件仍然存在。
rm file_hard.link # 删除硬链接
ll # 查看文件列表
输出结果
可以看到,file_target2.txt
仍然存在,只是硬链接数减少到 1。
3. 硬链接的用途
文件备份:通过硬链接创建文件的备份,节省磁盘空间。
文件共享:在不同目录中共享同一个文件。
系统文件管理:用于系统文件的冗余备份和管理。
4. 目录硬链接的特殊性
目录结构解析:
.
代表当前目录
..
代表父目录每个子目录的
..
都会增加父目录的链接计数
系统限制的意义:
禁止用户创建目录硬链接是为了防止出现循环引用,避免文件系统陷入死循环。
三、软链接与硬链接的区别
1. inode 编号
软链接:具有独立的 inode 编号。
硬链接:与目标文件共享同一个 inode 编号。
示例:
ll -i # 查看 inode 编号
输出结果
可以看到,file_soft.link
有独立的 inode 编号(527771),而 file_hard.link
与 file_target2.txt
共享同一个 inode 编号(527769)。
2. 路径依赖
软链接:依赖于目标文件的路径,路径改变会导致软链接失效。
硬链接:不依赖于目标文件的路径,即使目标文件被重命名或移动,硬链接仍然有效。
示例:
移动目标文件后,软链接失效,硬链接仍然有效。
mv file_target2.txt /home/lv/ # 移动目标文件
ll # 查看文件列表
输出结果
可以看到,file_soft.link
已经失效,而 file_hard.link
仍然有效。
3. 删除行为
软链接:删除软链接不会影响目标文件。
硬链接:删除一个硬链接不会影响其他硬链接或目标文件,只有当所有硬链接都被删除时,文件才会被真正删除。
示例:
删除目标文件后,硬链接仍然有效。
rm file_target2.txt # 删除目标文件
ll # 查看文件列表
输出结果
可以看到,file_hard.link
仍然存在,因为它是硬链接。
四、实际操作演示
1. 创建和删除软链接
2. 创建和删除硬链接
3. 软链接与硬链接的对比
五、深度对比分析
特性 | 软链接 | 硬链接 |
---|---|---|
存储内容 | 目标路径 | 直接指向inode |
inode编号 | 独立 | 与源文件相同 |
跨文件系统 | ✔️ | ❌ |
目录支持 | ✔️ | ❌(系统目录除外) |
文件删除影响 | 链接失效 | 减少链接计数 |
文件大小 | 路径字符长度 | 与源文件相同 |
权限显示 | 显示lrwxrwxrwx | 与源文件相同 |