Linux 中的符号链接是什么?如何创建符号链接?
符号链接,也称为符号链接或软链接,是一种特殊类型的文件,它只是指向另一个文件或目录,就像 Windows 中的快捷方式一样。创建符号链接就像为实际文件创建别名一样。
如果您尝试访问符号链接,则实际上访问的是符号链接指向的目标文件。对链接文件内容执行的更改会更改实际目标文件的内容。
如果你使用带有选项 -l 的 ls 命令,符号链接如下所示:
lrwxrwxrwx 1 abhishek abhishek 23 Jul 2 08:51 link_prog -> newdir/test_dir/prog.py
在大多数 Linux 发行版中,链接显示的颜色与其余条目不同,以便您可以将链接与常规文件和目录区分开来。
符号链接提供了一种组织和共享文件的便捷方式。它们可以快速访问冗长且混乱的目录路径。它们在 Linux 中的链接库中被广泛使用。
现在您对符号链接有了一些了解,让我们看看如何创建它们。
如何在 Linux 中创建符号链接
要从链接名创建到目标文件的符号链接,可以使用带有 -s 选项的ln 命令,如下所示:
ln -s target_file link_name
-s 选项在这里很重要。它决定链接是软链接。如果不使用它,它将创建一个硬链接。我将在另一篇文章中解释软链接和硬链接之间的区别。
如何跟踪符号链接
要知道链接实际指向哪个真实文件,请使用 realpath 命令:
realpath link_name
还有其他方法可以通过软链接到其源文件,但 realpath 是最简单的。
如何删除符号链接
Linux 中没有专门用于删除符号链接的命令。您可以使用与删除文件和目录相同的 rm 命令。
rm link_name
删除链接不会删除它链接到的源文件。
您也可以用一个命令删除多个符号链接:
rm link1 link2
还有一个unlink 命令。但与其名称给人的印象不同,unlink 命令并非专门用于删除链接。当然,它可以删除文件、文件夹和链接。但是,它有一定的局限性,使得 rm 命令成为删除链接的更好选择。
-type l
选项。关于符号链接需要注意的事项
符号链接有时可能会令人困惑,因此您应该注意一些事情。
对链接所做的更改反映在原始文件中
毕竟,这就是链接的全部目的。您可以通过访问链接来访问目标文件。您可以通过链接对目标文件进行更改。让我们看一个例子。
我在 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,不是 one)了吗?如果你熟悉Linux 中的文件权限,你就会知道 'l' 表示链接,因此它告诉你这个文件实际上是一个链接。提醒一下,- 表示文件,d 表示目录。
现在,如果我使用此链接更改内容或属性,则相同的内容或属性将反映在目标文件中。例如,我在软链接上使用 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 权限创建,但这毫无意义
您是否注意到符号链接上的文件权限?符号链接始终以 777 权限 (rwxrwxrwx) 创建。对于常规文件,这意味着任何人都可以访问该文件。但对于链接来说并非如此。
lrwxrwxrwx 1 abhishek abhishek 23 Jul 2 08:51 link_prog -> newdir/test_dir/prog.py
如果链接上的文件权限按原样处理,任何用户都可以创建指向安全文件的符号链接并自由访问它。这将是一个重大的安全问题。幸运的是,这种情况不会发生。因为重要的是目标文件的权限,而不是链接的权限。
您可以使用 chmod 命令来更改链接的权限,但它会更改链接文件的权限,而不是链接本身的权限。
您可以链接到链接的链接,也称为链式符号链接
您可以创建一个指向另一个链接的符号链接,依此类推。这称为链式符号链接。最好避免使用它们,因为它会造成更多混乱。
好了,就这些了。我假设你现在对软链接有了更好的了解,并且知道如何在 Linux 中创建符号链接。你可以阅读有关 symlinks 命令的信息,它可以帮助你在Linux 中查找损坏的符号链接并轻松管理它们。
如果您有任何问题或建议,请在下面留言。