在Linux系统中,ln命令是一个非常有用的工具,用于创建链接(link),将一个文件或目录链接到另一个位置。链接允许一个文件或目录可以同时存在于多个位置,而不会占用额外的磁盘空间。ln命令支持创建硬链接和软链接两种类型的链接。

语法

1
ln [option] [target] [linkname]

参数

参数 说明
-s 创建软连接
-f 删除已存在的目标文件
-n 如果 LINK_NAME 是指向目录的符号链接,则将其视为普通文件
-v 打印详情
-b 对每个已存在的目标文件进行备份
-d 允许超级用户尝试硬链接目录(注意:由于系统限制,即使对于超级用户,很可能会失败)
-r 创建相对于链接位置的符号链接
-P 直接创建指向符号链接的硬链接
-L 引用作为符号链接的目标文件

硬链接和软链接

硬链接(Hard Link)和软链接(Symbolic Link,也称为符号链接或软连接)是在文件系统中创建链接的两种方法。它们在功能和使用方式上有一些区别:

  • 存储位置:

硬链接:硬链接是指向同一个文件的多个目录项。它们共享相同的inode和数据块,实际上是指向相同的文件内容。删除原始文件不会影响硬链接,只有当所有硬链接和原始文件都被删除时,文件的内容才会被释放。
软链接:软链接是一个独立的文件,其中包含指向目标文件或目录的路径。软链接本身只是一个指针,它保存了目标文件的路径信息。如果原始文件被删除或移动,软链接将失效,无法访问目标文件。

  • 跨文件系统:

硬链接:硬链接只能在同一个文件系统中创建,因为它们是基于inode的链接。不能在不同的文件系统上创建硬链接。
软链接:软链接可以跨越不同的文件系统,因为它们是基于路径的链接。可以在不同的文件系统上创建软链接。

  • 目录链接:

硬链接:硬链接不能创建到目录上。因为目录已经包含了硬链接,再创建一个硬链接可能会导致循环链接的问题。
软链接:软链接可以创建到目录上,并且可以跨越文件系统边界。

  • 文件类型:

硬链接:硬链接只能链接到文件,无法链接到目录或特殊文件。
软链接:软链接可以链接到文件、目录或特殊文件。
总的来说,硬链接提供了更强的链接关系,因为它们共享相同的inode和数据块,看起来像是同一个文件的多个副本。而软链接则更加灵活,可以链接到不同的文件系统和目录,并且可以链接到目录本身。

示例

创建软链接

1
ln -s /root/hy/1 sym1

创建硬链接

1
ln /root/hy/1 hard1

查看,可以看到软链接会有->标识链接信息,而硬链接创建的就是一个普通文件

1
2
3
4
[root@master193 ln]# ls -lh
total 4.0K
-rw-r--r-- 2 root root 2 Nov 4 19:28 hard1
lrwxrwxrwx 1 root root 10 Nov 5 16:02 sym1 -> /root/hy/1

除了用ls -l 查看链接信息外,还可以使用readlink命令查看

1
2
3
4
[root@master193 ln]# cat sym1
1
[root@master193 ln]# readlink sym1
/root/hy/1