你可能知道 Windows 系统有个叫快捷方式的文件,当你为一个文件或者目录创建快捷方式时,无论你将快捷方式放在哪里,都会打开原来的那个文件或者目录。

但在 Linux 没有快捷方式的概念,我们称为符号链接,是指向另一个文件或目录的特殊类型的文件,也经常被称软链接。

符号链接是一类特殊的文件,其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。

至今 POSIX 标准的操作系统、大多数类 Unix/Linux 系统、Windows 都支持符号链接。 Linux/UNIX 系统中有两种类型的符号链接,分别是软链接或者硬链接。

硬链接

可以将硬链接视为现有文件的附加名称,硬链接将两个或多个文件名与相同的 inode 相关联。

您可以为一个文件创建一个或多个硬链接。但无法为目录,在不同文件系统或者,不同分区上的文件创建硬链接。

这是因为当对文件创建硬链接后,源文件与目标文件的 inode 号码相同,都指向同一个 inode。这一点决定了硬链接不能跨分区创建。

每个分区都有自己的 inode 表,如果硬链接可以跨分区创建的话,可能就是出现目标分区没有相同 inode 号码或者覆盖已经存在文件等等。

软链接

软链接类似于 Windows 快捷方式,它是指向文件或目录的间接指针。与硬链接不同,符号链接可以指向不同的文件系统,不同分区上的文件或者目录。

ln 命令详解

ln 命令常用于在创建文件与目录的链接。默认情况下,ln 命令创建硬链接。要创建软链接,请使用 ln 命令的 -s 选项。

ln 命令的语法形式是 ln [OPTIONS] FILE LINKOPTIONS 是 ln 命令的选项,可选参数。 FILE 文件或者目录绝对或者相对路径。 LINK 目标链接文件路径名称。

要在 Linux 创建符号链接,请按快捷键 CTRL+ALT+T 打开终端并运行命令 ln -s source_file symbolic_link。

ln -s source_file symbolic_link

将 source_file 替换为要为其创建符号链接的文件名称,并将 symbolic_link 替换为符号链接的名称。

symbolic_link 参数是可选的。如果未指定符号链接的目标,ln 命令将在当前目录创建软链接。

在下面的示例中,我们将为 my_file.txt 文件创建一个名为 my_link.txt 的软链接。要验证是否已创建符号链接,请运行 ls 命令

第一个 l 字符是文件类型的标识,l 表示符号链接。-> 符号是符号链接指向符号,它指向目标文件。

ln -s my_file.txt my_link.txt
ls -l my_link.txt
lrwxrwxrwx 1 myfreax users  4 Nov  2 23:03  my_link.txt -> my_file.txt

创建目录的符号链接与创建文件符号链接的命令相同。只需将目录名称指定为第一个参数,将符号链接指定为第二个参数。

例如,要创建从 /mnt/my_drive/movies 目录到 ~/my_movies 目录的符号链接。请运行命令 ln -s /mnt/my_drive/movies ~/my_movies。

ln -s /mnt/my_drive/movies ~/my_movies

覆盖符号链接

如果您尝试创建已存在的符号链接,ln 命令将打印错误消息。ln: failed to create symbolic link 'my_link.txt': File exists。

翻译过来就是“创建失败符号链接失败,my_link.txt 文件已经存在”。在这种情况下你有两种解决方案。第一种是删除已存在的符号链接。

第二种是要强制重新创建或者覆盖已经存在的符号链接,使用ln 命令的 -f / --force 选项。

ln -sf my_file.txt my_link.txt

删除符号链接

您可以使用 unlinkrm 命令删除符号链接。unlink 命令的语法很简单。使用rm 命令删除符号链接与删除文件时候相同。

如果删除源文件或将其移动到其他位置,则符号链接文件将保持悬空状态。你应该删除它,因为它不再起作用。

unlink symlink_to_remove
rm symlink_to_remove

结论

要在 Linux 创建符号链接, 请使用 ln 命令的 -s 选项。有关 ln 命令的更多信息,请访问 ln 手册页。如果您有任何问题或反馈,请随时发表评论。