在 Linux 和类 Unix 系统中,软链接(符号链接)和硬链接是用于文件系统中引用文件的两种方式。它们各自有不同的特点和用途。
软链接(符号链接) | 硬链接 | |
定义 | 软链接是一个指向另一个文件或目录的特殊文件,包含指向目标文件路径的文本信息 | 硬链接是指向文件系统中同一文件的另一个目录项。两个或多个硬链接指向同一个文件数据块 |
可否跨文件系统 | 可跨文件系统 | 不能跨文件系统 |
删除数据 | 软链接与原始文件是独立的,如果原始文件被删除,软链接将变为“断链”,无法访问 | 所有硬链接都指向相同的数据块,文件的内容不会因删除某个链接而丢失,只有在所有链接都被删除后,数据才会被释放 |
能否链接目录 | 软链接可以指向目录,也可以指向文件 | 硬链接不能为目录(除非是超级用户),只能为文件 |
磁盘空间使用 | 软链接是一个独立的文件,通常,软链接本身占用的磁盘空间非常小(一般为几十字节),但它不包含原始文件的数据 | 硬链接指向同一个物理数据块,不会占用额外的磁盘空间。每创建一个硬链接,系统会增加该文件的引用计数,但不会复制数据 |
是否创建新的inode | 创建,相当于重新创建一个文件 | 不创建,只给原文件多加一个文件名 |
能否修改 | 可修改,但需删除并重新创建以更改目标 | 不可修改,指向相同的数据块,可以重新创建一个硬链接 |
使用场景 | 常用于创建快捷方式、指向配置文件或在不同位置共享文件的情况 | 用于在文件系统中创建多个指向同一数据块的入口,适合需要共享文件内容的情况 |
创建方式 | ln -s /path/to/original /path/to/symlink | ln /path/to/original /path/to/hardlink |
实例
1、将/home/symlink1.txt文件,/home/symlink2/目录软链到/目录下
[root@test home]# ln -s /home/symlink1.txt /
[root@test home]# ln -s /home/symlink2/ /
2、将/home/hardlink1.txt硬链至/home/service/var(硬链接到/目录会报错,不同的分区与文件系统)
[root@test home]# ln /home/hardlink1.txt /home/service/var/