一、什么是硬链接和软链接
硬链接
在Linux操作系统中,硬链接相当于存储在硬盘驱动器中的文件,它实际上引用或指向硬盘驱动器上的某个点。硬链接是原始文件的镜像副本。 硬链接与软链接的区别在于,删除原始文件不会影响硬链接,但会使软链接无法操作。
可以将硬链接视为现有文件的附加名称。硬链接是指链接两个或多个具有相同inode的文件名。只能为位于同一文件系统或分区上的目录和文件创建硬链接。一个文件可以有一个或多个硬链接。
硬链接作为所选文件的副本(镜像)。它访问原始文件中可用的数据。如果先前选择的文件被删除,指向该文件的硬链接仍将包含该文件的数据。
简单来说就是:硬链接可视作指针,指向硬盘上的数据位置,即如果源文件内容修改了,则硬链接文件的内容也会被修改。
文件副本是复制源文件的所有内容,此为与硬链接的不同之处。
软链接
软链接,也称为符号链接,是一种文件类型,它作为对文件系统中另一个文件或目录的引用。它类似于Windows操作系统中的快捷方式,因为它允许从不同位置访问文件或目录,而无需创建副本。符号链接对于组织文件很有用,也可以更容易地访问经常使用的文件或目录。与硬链接不同,符号链接可以指向不同分区或文件系统上的文件或目录。
软链接是一种特殊的文件,它实际上是一个文本文件,其中包含有另一文件的路径信息。软链接文件的内容是另一文件的路径名。软链接文件可以看作是另一个文件名,它允许用户创建指向文件系统中的文件或目录的链接。软链接文件可以跨文件系统边界,因为它只包含路径信息,而不包含实际的文件数据。
软链接与硬链接的区别在于,软链接文件的内容是另一文件的路径名,而硬链接文件的内容是另一文件的inode。软链接文件可以跨文件系统边界,而硬链接文件只能在同一文件系统中。
软链接的优点是可以跨文件系统边界,而硬链接的优点是可以减少磁盘空间占用。
二、硬链接与软链接的区别
对比项 | 硬链接 | 软链接 |
---|---|---|
索引节点 | 采用相同的索引节点号 | 采用不同的索引节点号 |
目录 | 超级用户可以对目录作硬链接 | 不限制 |
文件系统 | 不能跨文件系统 | 可以跨文件系统 |
数据 | 原始文件中存在的数据在硬链接中仍然可用 | 软链接只指向文件名,不保留文件的数据。 |
原文件删除 | 如果原始文件被删除,该链接仍然有效 | 如果原始文件被删除,该链接将不起作用 |
速度 | 硬链接相对更快 | 软链接相对较慢 |
指针 | 指向硬盘中的数据位置 | 指向文件名 |
三、什么时候使用硬链接或软链接
硬链接
- 多个文件共享相同的inode,可以减少磁盘空间占用。
- 允许多个文件名指向同一文件,可以实现文件重命名。
- 允许文件权限的修改。
软链接
- 允许多个文件名指向同一文件,可以实现文件重命名。
- 允许跨文件系统边界。
- 软链接可以指向不存在的文件。
软链接通常足以让普通用户在大多数情况下创建链接。它们可用于跨文件系统、分区和各种硬盘驱动器上链接文件和目录。但是,当涉及到对引用对象进行更改(例如移动和删除它)时,软链接不如硬链接灵活。
硬链接通常可以链接文件,而不是目录或文件夹。由于inode编号只能在分区内管理,所以硬链接只能连接单个分区内的文件。然而,现代Linux系统通常包含位于不同硬盘驱动器和分区上的各种文件系统。
硬链接具有优势,特别是在备份方面。可以对原始文件进行替代访问,同时节省空间并提高数据安全性。
四、怎么创建硬链接和软链接
使用
ln
命令来创建
常用选项
-
-b
:创建链接时对存在的文件制作备份 -
-f, --force
:强制覆盖已存在的链接 -
-i, --interactive
:强制覆盖前询问 -
-s, --symbolic
:创建软链接 -
-t, --target-directory=[DIRECTORY]
:指定创建链接的目标目录 -
-S, --suffix=[SUFFIX]
:指定备份文件的后缀,默认是 ~ -
-v, --verbose
:打印debug信息 -
--help
:打印帮助信息 -
--version
:打印版本信息
命令实例
- 创建硬链接
shell
ln file.txt file_hard_link.txt
ls -il file_hard_link.txt 查看文件属性如下所示:
47924514 -rw-r--r-- 2 user staff 8 4 13 10:20 file_hard_link.txt
ls -il file.txt 查看文件属性如下:
47924514 -rw-r--r-- 2 user staff 8 4 13 10:20 file.txt
ls -i 表示查看文件的索引节点,此时显示两个文件的索引节点都为47924514,即表示两个文件指向相同的硬盘数据位置。
- 跨目录创建硬链接
shell
ln /videos/video.mp4 /home/abc/Desktop/hard_link_to_video_file
- 创建软链接链到文件
shell
ln -s file.txt file_soft_link.txt
ls -l file_soft_link.txt 查看文件属性如下所示:
lrwxr-xr-x 1 user staff 10 4 13 10:20 file_soft_link.txt -> file.txt
lrwxr-xr-x,前面的l代表此文件是软链接文件,后面的箭头表示此文件指向file.txt
- 创建软链接链到目录
shell
ln -s dir dir_soft_link
- 创建软链接链到其他目录
shell
ln -s ~/videos /tmp/video
- 删除软链接
shell
rm file_soft_link.txt
或:
unlink file_soft_link.txt
- 创建软链接的备份
shell
ln -sb file filt_soft_link
此时会生成 file_soft_link~ ,~ 此处为备份文件的后缀
- 强制覆盖已创建的软链接
shell
ln -sf file file_soft_link
- 强制覆盖软链接前询问
shell
ln -si file file_soft_link