Linux中的软链接和硬链接

时间:2020-03-21 11:43:32  来源:igfitidea点击:

Linux中软链接和硬链接是什么?

符号或者软链接是原始文件的实际链接,而硬链接是原始文件的镜像副本。
如果删除原始文件,软链接没有值,因为它指向不存在的文件。
但在硬链接的情况下,它完全相反。
即使删除原始文件,硬链接仍然具有原始文件的数据。
因为硬链接充当原始文件的镜像副本。

一个软链接

  • 可以越过文件系统,
  • 允许我们在目录之间链接,
  • 具有不同的inode编号和文件权限,而不是原始文件,
  • 权限不会更新,
  • 只有原始文件的路径,而不是内容。

一个硬链接

  • 不能跨越文件系统边界(即,硬链接只能在同一文件系统上工作),
  • 无法链接目录,
  • 具有与原始文件相同的inode号和权限,
  • 如果我们更改源文件的权限,则将更新权限,
  • 具有原始文件的实际内容,使我们仍然可以查看内容,即使原始文件移动或者删除。

创建软链接或者符号链接

让我们创建一个名为"test"的空目录。

$mkdir test

更改为"test"目录:

$cd test

现在,创建一个名为source.file的新文件,其中一些数据如下所示。

$echo "Welcome to theitroad" >source.file

让我们查看source.file的数据。

$cat source.file
Welcome to theitroad

现在,创建到source.file的符号或者软链接。

为此,运行:

$ln -s source.file softlink.file

让我们比较source.file和softlink.file的数据。

$cat source.file 
Welcome to theitroad
$cat softlink.file 
Welcome to theitroad

如上所述,SoftLink.file显示与source.file的数据相同。

让我们查看softlink.file和source.file的inode和权限。

$ls -lia

示例输出:

total 12
11665675 drwxrwxr-x  2 sk sk 4096 Oct 17 11:39 .
 4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 ..
11665731 lrwxrwxrwx  1 sk sk   11 Oct 17 11:39 softlink.file -> source.file
11665692 -rw-rw-r--  1 sk sk   21 Oct 17 11:39 source.file

正如我们在上面的屏幕截图中看到的那样,inode号码(11665731 vs 11665692)和文件权限(lrwxrwxrwx vs -rw-r - r--)也不同,即使softlink.file有相同的内容作为source.file,。
因此,证明软链接不共享与原始文件相同的inode号码和权限。

现在,删除原始文件(i.e source.file)并查看会发生什么。

$rm source.file

使用命令检查softlink.file的内容:

$cat softlink.file

示例输出:

cat: softlink.file: No such file or directory

如上所述,在删除原始文件(i.e source.file)之后,没有称为softlink.file这样的文件或者目录。
因此,现在我们了解软链接只是指向原始文件的链接。
SoftLink就像文件的快捷方式。
如果删除文件,则快捷方式无用。

如我们所知,如果删除软链接,则仍将可用原始文件。

创建硬链接

创建一个名为source.file的文件,其中包含一些内容,如下所示。

$echo "Welcome to theitroad" >source.file

让我们验证文件的内容。

$cat source.file
Welcome to theitroad

source.file已创建现在。

现在,让我们创建到Source.file的硬链接,如下所示。

$ln source.file hardlink.file

检查suchlink.file的内容。

$cat hardlink.file
Welcome to theitroad

我们看到starlink.file显示与source.file相同的数据。

让我们查看supplink.file和source.file的inode和权限。

$ls -lia

示例输出:

total 16
11665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:58 .
4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 ..
11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 hardlink.file
11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 source.file

现在,我们看到supplink.file和source.file具有相同的inode编号(11665692)和文件权限(-rw-r - r--)。
因此,证明硬链接文件共享与原始文件相同的inode号码和权限。

注意:如果我们更改Source.file的权限,则同样的权限也将应用于suchplink.file。

现在,删除原始文件(i.e source.file)并查看会发生什么。

$rm source.file

检查硬链接的内容。
使用命令:

$cat hardlink.file

如上所述,即使我删除了源文件,我也可以查看stronkink.file的内容。
因此,证明硬链接共享相同的inode号码,原始文件的权限和数据。

那么,硬链接和正常复制文件之间有什么区别?

我们可能想知道为什么我们可以轻松复制/粘贴原始文件的同时创建硬链接?
创建文件的硬链接与复制它不同。

如果复制文件,它将重复内容。
因此,如果修改一个文件的内容(原始或者硬链接),则它对另一个文件没有影响。
但是,如果我们创建到文件的硬链接并更改任何一个文件的内容,则两者都将看到更改。

让我们看看source.file。

$cat source.file 
Welcome to theitroad

源文件有一个单行,称欢迎oniTorad。

追加一条新行,例如"欢迎来到Linux"源.File或者starlink.file。

$echo "Welcome to Linux" >>source.file

现在检查两个文件的内容。

$cat hardlink.file 
Welcome to theitroad
Welcome to Linux
$cat source.file 
Welcome to theitroad
Welcome to Linux

我们刚刚在Source.file上制作的更改在两个文件中更新。
意味着文件(源和硬链接)同步。
无论我们在任何文件中所做的任何更改都将反映在其他文件中。
如果通常复制/粘贴文件,则不会看到其他文件中的任何新更改。