ln
ln 用于在 Linux 中创建文件链接(硬链接或软链接),是管理文件引用关系的基本工具
ln [选项] 源文件 链接文件| 参数 | 说明 |
|---|---|
| 源文件 | 被链接的原始文件或目录 |
| 链接文件 | 创建的链接名称 |
| 选项 | 说明 |
|---|---|
-s |
创建软链接(符号链接),不加则为硬链接 |
-f |
强制创建,若链接文件已存在则覆盖 |
-i |
覆盖前提示确认 |
-v |
显示详细操作信息 |
Linux 文件组织
Section titled “Linux 文件组织”在 Linux 中,文件由元数据和用户数据组成。元数据中包含文件名和 inode 节点;用户数据中包含实际的文件数据。
inode 节点是每个文件在文件系统中的唯一标识,它记录了文件类型、权限信息、大小、时间戳、链接数等,但不包含文件名(文件路径)。

概念
硬链接是指多个文件名指向相同的 inode(即文件的真实数据块),它们共享同一个文件内容。

特点
- 共享 inode:硬链接与源文件拥有相同的 inode 编号,指向同一份数据
- 删除源文件不影响硬链接:只要有一个硬链接存在(inode 的引用计数大于 0),文件内容依然存在
- 不能跨文件系统:硬链接只能在同一个文件系统(如同一分区)内创建
- 不能指向目录:出于防止目录循环引用的考虑,Linux 不允许为目录创建硬链接
- 权限同步:硬链接与源文件的权限、所有者等属性完全一致(因为共享 inode)
创建硬链接
ln 源文件 链接文件示例
echo "Hello" > file.txtln file.txt link_hard.txtls -li file.txt link_hard.txt输出:
50231 -rw-r--r-- 2 bdathe bdathe 12 Aug 5 13:44 file.txt50231 -rw-r--r-- 2 bdathe bdathe 12 Aug 5 13:44 link_hard.txt
file.txt和link_hard.txt的 inode 相同,硬链接计数是 2
概念
软链接又叫符号链接,是一个特殊类型的文件,它包含了指向原始文件路径的引用(即路径字符串),类似于 Windows 的快捷方式

特点
- 独立 inode:软链接有自己的 inode 编号,本质是一个包含目标路径的特殊文件
- 依赖源文件路径:如果源文件被删除或移动,软链接会失效(显示“断链”)
- 可跨文件系统:软链接可以指向不同分区或文件系统中的文件/目录
- 可指向目录:允许为目录创建软链接,这是软链接与硬链接的重要区别之一
- 权限特殊:软链接的权限总是
rwxrwxrwx,但实际权限由目标文件决定
创建软链接
ln -s 源文件/目录 软链接文件示例
echo "Hello" > file.txtln -s file.txt link_soft.txtls -li file.txt link_soft.txt输出:
50231 -rw-r--r-- 1 bdathe bdathe 12 Aug 5 13:44 file.txt 6324 lrwxrwxrwx 1 bdathe bdathe 8 Aug 5 13:51 link_soft.txt -> file.txt
file.txt和link_soft.txt有不同的 inode 节点。
查看链接信息
Section titled “查看链接信息”ls 工具
ls 是最常用的查看链接信息的命令:
-i:显示文件的 inode 编号,用于区分硬链接和软链接-l:显示详细信息,软链接会显示链接名 -> 目标路径-F:在文件名后添加符号标识,软链接会加@
readlink 工具
readlink 专门用于查看软链接指向的目标路径:
-f:递归解析链接,返回目标文件的绝对路径
stat 工具
stat 可以显示文件(包括链接)的详细元数据,如 inode 信息、权限、创建时间等,能更深入地区分硬链接和软链接。
find 工具
如果需要找到某个文件的所有硬链接(即共享同一 inode 的文件),可以用 find 结合 inode 编号搜索:
-inum:查找所有硬链接
man ln- GNU Coreutils – ln