Linux 中的符号链接是什么? 如何创建符号链接?

一个符号链接, 也称为符号链接或软链接, 是一种特殊类型的文件,它只是指向另一个文件或目录,就像 Windows 中的快捷方式一样。 创建符号链接就像为实际文件创建别名。

如果您尝试访问符号链接,您实际上访问的是符号链接指向的目标文件。 对链接文件内容的更改会更改实际目标文件的内容。

如果您使用带有选项 -l 的 ls 命令,则符号链接如下所示:

lrwxrwxrwx 1 abhishek abhishek 23 Jul  2 08:51 link_prog -> newdir/test_dir/prog.py

在大多数 Linux 发行版中,链接以与其余条目不同的颜色显示,以便您可以将链接与常规文件和目录区分开来。

软链接以不同颜色显示

符号链接提供了一种组织和共享文件的便捷方式。 它们提供对长而混乱的目录路径的快速访问。 它们大量用于链接 Linux 中的库。

现在您对符号链接有了一些了解,让我们看看如何创建它们。

要从链接名称创建到目标文件的符号链接,可以使用带有 -s 选项的 ln 命令,如下所示:

ln -s target_file link_name

-s 选项在这里很重要。 它确定该链接是软链接。 如果您不使用它,它将创建一个硬链接。 我将在另一篇文章中解释软链接和硬链接之间的区别。

符号链接有时可能会令人困惑,因此您应该注意一些事项。

毕竟,这就是链接的全部目的。 您可以通过访问链接访问目标文件。 您可以通过链接对目标文件进行更改。 一起来看看 example.

我在 newdir/test_dir 中有一个文件 prog.py。 它具有以下属性:

-rw-r--r-- 1 abhishek abhishek 163 Apr 13 15:07 newdir/test_dir/prog.py

现在,我将在当前目录中创建指向此文件的软链接:

ln -s newdir/test_dir/prog.py link_prog

以下是新创建的链接的属性:

lrwxrwxrwx 1 abhishek abhishek 23 Jul  2 08:51 link_prog -> newdir/test_dir/prog.py

注意 l (它是L,不是一个)在行的开头? 如果您熟悉 Linux 中的文件权限,您就会知道“l”表示链接,因此它告诉您该文件实际上是一个链接。 为了刷新你的记忆,- 表示文件,d 表示目录。

现在,如果我使用此链接更改内容或属性,同样会反映在目标文件中。 为了 example,我在软链接上使用了 touch 命令,你会注意到它改变了目标文件的时间戳。

touch link_prog 

ls -l newdir/test_dir/prog.py 

-rw-r--r-- 1 abhishek abhishek 163 Jul  2 10:04 newdir/test_dir/prog.py

您如何知道链接指向文件还是目录? 在您遵循路径并访问目标文件本身之前,您无法知道这一点。

是的,这完全有可能。 这就是为什么在 Linux 中创建软链接时应该小心的原因。 您要链接的目标文件不需要存在。 创建指向不存在的文件/目录的链接时,您不会收到任何错误或警告。

只有当您尝试通过链接或单独访问目标文件时,您才会收到错误消息。 ls 命令仍然可以工作。

ln -s non_existant_dir link_dir
less link_dir
link_dir: No such file or directory

您是否注意到符号链接上的文件权限? 符号链接始终使用 777 权限 (rwxrwxrwx) 创建。 对于常规文件,这意味着任何人都可以访问该文件。 但链接的情况并非如此。

lrwxrwxrwx 1 abhishek abhishek 23 Jul  2 08:51 link_prog -> newdir/test_dir/prog.py

如果链接上的文件权限按原样处理,则任何用户都可以创建指向安全文件的符号链接并自由访问它。 那将是一个重大的安全问题。 谢天谢地,这不会发生。 因为目标文件的权限很重要,而不是链接的权限。

您可以使用 chmod 命令更改链接的权限,但它会更改链接文件的权限,而不是链接本身。

您可以创建一个指向另一个链接的符号链接,依此类推。 这称为链式符号链接。 最好避免使用它们,因为它会造成更多混乱。

嗯,就是这样。 我假设您现在对软链接有了更好的了解,并且您知道如何在 Linux 中创建符号链接。 您可以阅读 symlinks 命令,该命令可以帮助您在 Linux 中找到损坏的符号链接并轻松管理它们。

如果您有任何问题或建议,请在下方发表评论。