目录
一、什么是软链接?
1. 创建软链接
2. 软链接的特性
3. 软链接的用途
二、什么是硬链接?
1. 创建硬链接
2. 硬链接的特性
3. 硬链接的用途
4. 目录硬链接的特殊性
编辑
1. inode 编号
2. 路径依赖
3. 删除行为
四、实际操作演示
1. 创建和删除软链接
2. 创建和删除硬链接
五、深度对比分析
一、什么是软链接?
软链接(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. 软链接的特性
示例:
删除目标文件后,软链接将失效。
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. 硬链接的特性
示例:
删除一个硬链接,目标文件仍然存在。
rm file_hard.link # 删除硬链接
ll # 查看文件列表
输出结果
可以看到,file_target2.txt
仍然存在,只是硬链接数减少到 1。
3. 硬链接的用途
文件备份:通过硬链接创建文件的备份,节省磁盘空间。
文件共享:在不同目录中共享同一个文件。
系统文件管理:用于系统文件的冗余备份和管理。
4. 目录硬链接的特殊性
目录结构解析:
.
代表当前目录
..
代表父目录每个子目录的
..
都会增加父目录的链接计数
系统限制的意义:
禁止用户创建目录硬链接是为了防止出现循环引用,避免文件系统陷入死循环。
三、软链接与硬链接的区别
1. 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 | 与源文件相同 |