Linux 基础 IO:软硬链接详解
一、如何建立文件之间的软硬链接
软硬链接是 Linux 文件系统中用于建立文件之间关联的两种机制。建立软链接或硬链接的前提是存在一个已存在的源文件。
建立文件之间的软链接
使用 ln -s 命令建立软链接。其中 -s 选项代表 soft(柔软),表示创建符号链接。
ln -s 被软链接的文件 进行软链接的文件
执行后,使用 ls -l -i 查看 inode 编号,会发现软链接文件拥有自己独立的 inode 编号,与源文件不同。这表明软链接是一个独立的文件,拥有自己的属性。
建立文件之间的硬链接
使用 ln 命令建立硬链接。如果不带 -s 选项,默认进行硬链接。
ln 被硬链接的文件 进行硬链接的文件
执行后,使用 ls -l -i 查看 inode 编号,会发现硬链接文件与源文件共用同一个 inode 编号。这表明硬链接文件不是独立的文件,没有属于自己的 inode,也没有独属于自己的属性。这也侧面说明文件名不属于 inode 中的文件属性,因为硬链接文件名与源文件名可以不同。
二、深入理解软硬链接
如何理解软链接
- 软链接是一个独立的文件,具有独立的 inode 和数据块。数据块中保存的是指向源文件的路径。
- 删除软链接文件使用
unlink命令,仅删除链接本身,不影响源文件。 - 软链接相当于 Windows 桌面上的快捷方式。它存储了应用程序的路径,用户通过快捷方式即可找到并打开实际程序,无需知道具体路径。
- 在正规项目中,若可执行文件路径很深,可在当前路径下建立软链接指向该文件,方便直接执行。
- 也可以将软链接放到系统指令路径(如
/usr/bin)中,这样执行时不需要带路径,系统会在 PATH 环境变量指定的目录中搜索。
软链接的应用场景
- 简化路径访问:当可执行文件路径很深时,在当前路径建立软链接即可直接执行。
- 系统命令扩展:将自定义程序软链接到
/usr/bin,实现全局调用。
示例代码(C 语言):
#include <stdio.h>
int main() {
printf("hello soft link\n");
return 0;
}
编译后生成可执行文件,可通过软链接在不同目录下运行。
如何理解硬链接
- 硬链接不是一个独立的文件,因为它没有独立的 inode。
- 多个文件名可以对应同一个 inode。inode 结构体内部有一个引用计数(硬链接数),表征有多少个文件名指向它。
- 建立硬链接的本质是在特定目录的数据块中新增文件名和 inode 编号的映射关系。
- 删除硬链接文件(使用
unlink)只会减少引用计数。只有当引用计数减为 0 时,才会真正删除 inode 和数据块。 - 目录中也存在硬链接机制,例如当前目录 和上级目录 都是特殊的硬链接。


