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

时间:2020-03-05 15:29:49  来源:igfitidea点击:

在Linux中什么是符号链接,为什么要使用它?

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

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

如果将ls命令与选项-l一起使用,则符号链接如下所示:

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

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

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

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

如何在Linux中创建符号链接

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

ln -s target_file link_name

-s选项在这里很重要。
它确定该链接是软链接。
如果我们不使用它,它将创建一个硬链接。

我将在另一篇文章中解释软链接和硬链接之间的区别。

关于符号链接的注意事项

有时符号链接可能会造成混乱,因此我们应注意一些事项。

对链接所做的更改将反映在原始文件中

毕竟,这就是链接的全部目的。
我们可以通过访问链接来访问目标文件。
我们可以通过链接对目标文件进行更改。
让我们来看一个例子。

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

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

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

ln -s newdir/test_dir/prog.py link_prog

这是新创建的链接的属性:

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

注意行首的l(不是L)吗?
如果我们熟悉Linux中的文件权限,我们会知道“ l”表示链接,因此它告诉我们该文件实际上是链接。

记住:–表示文件,d表示目录。

现在,如果我使用此链接更改内容或者属性,则这些内容或者属性将反映在目标文件中。
例如,我在软链接上使用触摸命令,我们会注意到它会更改目标文件的时间戳。

touch link_prog 
ls -l newdir/test_dir/prog.py 
-rw-r--r-- 1 igi igi 163 May  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 igi igi 23 May  2 08:51 link_prog -> newdir/test_dir/prog.py

如果按原样对待链接上的文件权限,则任何用户都可以创建指向安全文件的符号链接并自由访问它。
那将是一个主要的安全问题。
幸运的是,那没有发生。
因为对目标文件的权限很重要,所以对链接的权限并不重要。

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

我们可以链接到链接的链接,也称为链接符号链接

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