ln
是 Linux 和 Unix 系统中用于创建链接文件 的命令。链接文件分为两种类型:
硬链接(Hard Link) :指向文件数据本身,链接与原文件共享相同的 inode。
符号链接(Symbolic Link) :类似于 Windows 中的快捷方式,指向原文件的路径,而不是文件数据。
ln
命令的基本语法
参数说明:
源文件 :需要创建链接的原文件或目录。
目标文件 :链接文件的名称或路径。
选项 :
-s
:创建符号链接(软链接)。
-f
:强制删除已有的目标链接文件。
-v
:显示详细信息。
-n
:在符号链接上创建新的符号链接(而不是覆盖符号链接指向的文件)。
-i
:在覆盖目标文件时提示用户确认。
-T
:将目标始终作为文件(强制不将目标视为目录)。
硬链接(Hard Link)
硬链接是指向同一个文件数据块的多个文件名。这些文件共享相同的 inode ,因此它们是完全等价的。
硬链接的特点:
硬链接与原文件共享相同的文件数据和 inode。
删除硬链接或原文件不会影响文件数据,只有当所有的硬链接都删除后,数据才会被释放。
硬链接只能在同一个文件系统中创建,不能跨分区。
创建硬链接
示例输出:
1 2 123456 -rw-r--r-- 2 user group 1234 Dec 9 10:10 file1 123456 -rw-r--r-- 2 user group 1234 Dec 9 10:10 hardlink1
说明:
123456
是 inode 号,file1
和 hardlink1
的 inode 相同。
硬链接文件数量为 2
,表示文件有两个硬链接。
符号链接(Symbolic Link)
符号链接(软链接)是一个指向目标文件路径的快捷方式,它与原文件有独立的 inode。
符号链接的特点:
符号链接是一个独立的文件,内容仅是指向目标文件的路径。
如果原文件被删除,符号链接会变为“断开的链接”(Broken Link),无法访问。
符号链接可以跨文件系统或分区创建。
创建符号链接
示例输出:
1 lrwxrwxrwx 1 user group 5 Dec 9 10:10 symlink1 -> file1
说明:
l
表示这是一个符号链接。
symlink1 -> file1
表示 symlink1
指向 file1
。
删除链接
目录链接
为目录创建符号链接
示例输出:
1 lrwxrwxrwx 1 user group 8 Dec 9 10:10 mylog -> /var/log
说明:mylog
是指向 /var/log
的符号链接。
硬链接不能直接用于目录
硬链接默认不能用于目录,因为这会破坏文件系统的结构(防止循环引用)。如果确实需要对目录创建硬链接,可以使用 cp
命令或高级工具(如 rsync
)。
强制覆盖目标链接
如果目标链接文件已存在,可以使用 -f
选项强制覆盖:
说明:将 symlink1
强制指向新的文件 file2
。
常见用法示例
创建硬链接
创建一个硬链接 hardlink1
,与 file1
共享同一个文件数据。
创建符号链接
创建一个符号链接 symlink1
,指向 file1
。
为目录创建符号链接
1 ln -s /usr/local/bin mybin
将 /usr/local/bin
目录链接到当前目录下的 mybin
。
强制覆盖符号链接
强制将 symlink1
指向 file2
(即使 symlink1
已存在)。
跨分区创建链接
硬链接 不能跨分区:
1 ln /mnt/file1 /tmp/hardlink1
错误:
1 ln: failed to create hard link '/tmp/hardlink1': Invalid cross-device link
符号链接 可以跨分区:
1 ln -s /mnt/file1 /tmp/symlink1
硬链接与符号链接的区别
特性
硬链接
符号链接
链接方式
指向文件数据块,直接共享 inode
指向文件路径
文件系统
必须在同一个文件系统内
可以跨文件系统或分区
删除源文件
不影响硬链接文件,文件数据仍然存在
符号链接会变为断开的链接,无法访问
支持目录
默认不支持目录硬链接(防止循环引用)
支持目录符号链接
inode 是否相同
相同
不同
查看链接信息
示例输出:
1 2 3 123456 -rw-r--r-- 2 user group 1234 Dec 9 10:10 file1 123456 -rw-r--r-- 2 user group 1234 Dec 9 10:10 hardlink1 789012 lrwxrwxrwx 1 user group 5 Dec 9 10:10 symlink1 -> file1
file1
和 hardlink1
的 inode 相同,表示它们是硬链接。
symlink1
的 inode 不同,且 -> file1
表示它是一个符号链接。
总结
硬链接 (ln
):ln 源文件 硬链接文件
符号链接 (ln -s
):ln -s 源文件 符号链接文件
常用选项 :
-s
:创建符号链接。
-f
:强制覆盖目标链接。
-v
:显示详细信息。
硬链接特点 :
同一个文件的多个名字,共享 inode。
不能跨分区创建。
符号链接特点 :
独立文件,指向原文件路径。
可以跨分区,也可以指向目录。
熟练使用 ln
命令,可以高效地管理文件链接和目录结构。