符号链接(symbolic link)是 Linux 系统中的一种文件,它指向系统中的另一个文件或目录。符号链接类似于 Windows 系统中的快捷方式。

也有人称它“软链接(soft links)”——Linux/UNIX 系统中的一种链接形式——与之对应的是“硬链接(hard links)”。

软链接和硬链接的区别

软链接类似于快捷方式,它可以指向任意文件系统中的一个文件或目录。

硬链接也可以看作是文件或目录的快捷方式,但是无法在两个不同文件系统之间创建硬链接。

我们将会学习如何创建及删除符号链接,还会了解什么是失效链接,以及如何删除它们。

如何创建符号链接

创建符号链接的语法:

ln -s <path to the file/folder to be linked> <the path of the link to be created>

ln 是链接命令,-s 指定此链接为软链接,-s 也可以写为 -symbolic

ln 命令默认会创建硬链接。path to the file (or folder) 声明了链接目标,即想要为其创建快捷方式的文件或目录。

path to link 即链接(快捷方式)名称。

如何为一个文件创建符号链接——命令示例

ln -s /home/james/transactions.txt trans.txt

执行这个命令之后,就可以通过 trans.txt 来访问 /home/james/transactions.txt。对于 trans.txt 的修改会体现到源文件上。

注意,以上命令会在当前目录创建链接文件 trans.txt。你也可以使用以下命令在其它目录中创建链接文件:

ln -s /home/james/transactions.txt my-stuffs/trans.txt

以上命令要求当前目录必须存在一个名为 "my-stuffs" 的目录——否则会抛出错误。

如何为目录创建符号链接——命令示例

与上面的命令类似:

ln -s /home/james james

这会创建一个名为 "james" 的符号链接文件夹,其中包含了 /home/james 目录中的内容。对于链接文件夹的操作也会体现到原始文件夹。

如何删除符号链接

在删除符号链接之前,需要确认这个文件或文件夹确实是符号链接,以免误删源文件。

可以这样做:

ls -l <path-to-assumed-symlink>

在终端运行以上命令会打印出这个文件的属性信息。如果第一个字符是小写的 "L"(l)的话,即表明这个文件(或文件夹)是一个符号链接。

你还可以看到末尾有一个箭头(->),指向这个符号链接的目标文件(或文件夹)。

有两种方式可以删除符号链接:

语法如下:

unlink <path-to-symlink>

如果命令成功执行的话,将会删除指定的符号链接。

即使符号链接是文件夹形式的,也不要在前面加 "/",如果加了 "/",Linux 会把它当成是一个目录,然而 unlink 是无法删除目录的。

使用 rm 删除符号链接

正如我们所见,符号链接只是一种指向源文件(或目录)的文件(或目录)。只要删除链接文件就可以解除这种关系。

语法如下:

rm <path-to-symlink>

例如:

rm trans.txt
rm james

注意,试图执行 rm james/ 会引发错误,因为 Linux 会把 james/ 当成目录来处理,要想删除目录还需要提供 rf 等参数,然而这并不是我们想要的。虽然符号链接有可能是文件夹形式的,但我们只需要关心它的名字。

比起 unlinkrm 的主要优势在于可以一次性删除多个符号链接,就像删除多个文件那样。

如何找出失效链接并将其删除

当源文件(或目录)被移动或者被删除时,指向它的符号链接就会失效。

如果把 "transactions.txt" 从 /home/james 移动到 /home/james/personal,"trans.txt" 这个链接就会失效。之后尝试访问 "trans.txt" 会引发错误:"No such file or directory"。

如果发现失效的链接,可以很轻松地将其删除。以下方法可以很方便地找出失效链接:

find /home/james -xtype l

这个命令会列出 james 目录下各种类型(如:文件、目录及子目录)的所有失效链接。

传入 -delete 参数就可以将它们删除:

find /home/james -xtype l -delete

总结

符号链接是 Linux/UNIX 系统的有趣特性。

可以为不方便访问的文件或文件夹创建符号链接,以便于访问。多加练习,你就能对它的工作方式有一个直观的理解。符号链接能够帮助你更高效地管理文件系统。

原文:Symlink Tutorial in Linux – How to Create and Remove a Symbolic Link,作者:Dillion Megida