Linux中的软链接

时间:2020-02-23 14:40:30  来源:igfitidea点击:

Linux系统中的链接是指向文件或者目录的指针。
Linux中有两种类型的链接,即软链接和硬链接。

在本文中,我们将详细研究软链接。
与Windows中的快捷方式类似,软链接(也称为符号链接)指向文件而不存储文件内容。
对文件或者软链接所做的任何更改都会反映在文件的两个版本中。

Linux中软链接的表示

了解了软链接的概念之后,我们需要知道如何在文件系统中发现软链接。

配色方案

"'ls'"命令为Linux文件系统中的每个不同组件提供了配色方案。
软链接用"青色"颜色表示。

在上面的输出中,"桌面"和"程序"是软链接。
某些系统可能已经修改了其默认配色方案,因此无法找出软链接。

使用ls -l命令,我们可以清楚地找到目录中存在的链接。

它不仅指定目录中的链接,而且还显示软链接的原始文件位置或者目录。

GUI表示

与Windows中的快捷方式类似,Linux在软链接的图标中提供了提示。
软链接的GUI图标在右下角包含箭头符号。

从图中可以很明显地看出,名为" desktop"的软链接是指向目录的指针,而" program"则指向" .cpp"文件。

如何在Linux中创建软链接?

既然我们已经看到了发现软链接的方法,我们将学习如何在Linux中创建软链接。
这是在" ln"命令的帮助下完成的。

ln -s <PATH>/<ORIGINAL_FILE> <LINK_NAME>

" ln"命令专门用于在Linux中创建链接。
上面命令中使用的'-s'选项表示创建软链接。

使用"'ls -l'"命令,我们可以检查软链接的创建是否成功。

编辑原始文件

由于软链接只是原始文件的符号,因此在原始文件中所做的任何更改也将反映在软链接中。
让我们演示一下更改:

  • 原始文件–"文档"文件夹中的" my_program.cpp"
  • 软链接–桌面上的"程序"

我们将使用sed命令编辑原始文件。

sed -i "s/main/disdain/g" my_program.cpp

编辑原始文件

上面的命令只是查找单词" main"的所有出现,并将其中的每个单词替换为" disdain"。

桌面上的"程序"文件是一个软链接,因此必须反映原始文件中所做的更改。

通过软链接编辑内容

编辑软链接的内容也会反映原始文件中的更改。
以下屏幕截图可以证明这一点:

如前所述,"程序"是一个软链接。
使用" echo"命令,在软链接后附加"已编辑"一词。
我们也可以清楚地看到原始文件'my_program.cpp'中发生的更改。

<p><span style="color:#718791" class="has-inline-color">Note: While editing the soft link we did not use <code>'sed -i' command, as in the process, the soft link is removed and a new file is created with the same name.</p><p><span style="color:#718791" class="has-inline-color">We will see later that removing the original file and placing it back, preserves the link.</p>

识别Linux中断开的软链接

当我们删除原始文件时,软链接断开。
使用" ls"命令时,断开的链接将以红色显示,并带有黑色背景。

在上图中,我们将原始文件移动到当前目录。
当我们从原始位置删除原始文件时,可以在软链接上看到颜色的变化。

修复断开的链接

每个软链接都指向原始文件。
我们可以通过用另一个同名文件替换原始文件来轻松修复断开的链接。
我已经在下面演示了相同的内容。

在Linux中删除软链接

删除软链接的最简单方法是使用"'rm'"命令,后跟链接名称。

rm <LINK_NAME>

使用" rm"删除链接

在Linux中,还有另一种删除链接的方法。
这是通过'unlink'命令完成的。

unlink <LINK_NAME>

软链接的软链接

使用" ln"命令,让我们创建一个到先前创建的软链接的软链接。

ln -s <LINK_NAME> <NEW_LINK_NAME>

很明显,这些链接构成了一条链。
任何一个链接的更改都会反映在每个文件中。

由于连续的链接形成一条链,因此删除中间的任何链接都会破坏子链接。
例如,如果我们删除第一个软链接"程序",则子链接将中断。

当我们在中间断开链接时,完整的链条也会断开。