硬链接是否等同于 Windows 快捷方式?

Com*_*erd 52 windows hard-link

维基百科将硬链接定义为:

将名称与文件系统上的文件相关联的目录条目。(目录本身是一种特殊类型的文件,其中包含此类条目的列表。)该术语用于允许为同一文件创建多个硬链接的文件系统中。

我想知道硬链接的概念是否等同于 Windows 的Shortcut概念。

如果硬链接不等同于快捷方式,那么最接近硬链接的 Windows 功能是什么?

ter*_*don 114

不,硬链接完全不同。软链接更接近 Windows 快捷方式(尽管存在重要差异,但符号链接比硬链接更类似于 Windows 快捷方式)。硬链接是另一回事,您几乎永远不需要。

简而言之,使用以下命令创建软链接:

ln -s foo bar
Run Code Online (Sandbox Code Playgroud)

如果你然后运行ls -l,你会看到:

lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo
Run Code Online (Sandbox Code Playgroud)

链接到的->手段。因此,例如使用文本编辑器打开 ,实际上会打开单独的文件. 但是,删除只会删除快捷方式,不会影响文件。barfoobarfoobarfoo

另一方面,硬链接是使用以下命令创建的:

ln foo bar
Run Code Online (Sandbox Code Playgroud)

如果您现在运行ls -l,则没有迹象表明文件之间有任何关系:

-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo
Run Code Online (Sandbox Code Playgroud)

但是——这很重要——它们实际上是同一个文件。Unix 文件系统上的文件使用inode存储;inode 基本上是文件系统将文件名映射到物理硬盘驱动器上特定位置的方式。因此,硬链接是指向与其目标相同的 inode 的文件。另一种说法是,所有文件实际上都是指向其 inode 的硬链接。对文件进行硬链接只会在文件系统上创建一个指向同一 inode 的新指针(文件)。每个 inode 可以有多个文件指向它,一个文件,或者一个文件都没有。

要更清楚地理解这一点,请使用ls -iwhich 显示与文件关联的 inode。让我们创建一个软链接和一个硬链接,看看会发生什么:

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo
Run Code Online (Sandbox Code Playgroud)

现在,检查他们的 inode:

在此处输入图片说明

正如你可以在上面看到,无论是fooHardLinkToFoo具有相同的inode(16648029),而SoftLinkToFoo有一个不同的(16648036)。

如果我们重命名会发生什么foomv foo bar

在此处输入图片说明

红色表示软链接已损坏,无法再找到其目标。这是因为软链接指向文件名,而不是它的 inode。请注意,尽管更改了名称,但 inode 保持不变,因此硬链接很好,它仍然有效。

综上所述,硬链接实际上是同一个文件的两种表现形式;它们是指向磁盘同一部分的指针。软链接只是快捷方式。以现实世界为例,硬链接就像同一条电话线上的两个不同电话号码,而软链接就像在同一个房子里有两条不同的电话线。

  • 请注意,Windows 快捷方式是外壳程序使用的文件,因此可以执行外壳程序知道的操作,但文件系统不知道。例如,您可以创建 shell 命名空间的快捷方式(例如控制面板、计算机等),或者您可以创建尚未安装的应用程序(将在首次使用时安装)的快捷方式。这些东西在文件系统世界中没有直接的等价物。 (7认同)
  • @Kiwy 恰恰相反:绝对符号链接会以许多不同的方式失败(一旦您移动数据,将其安装到不同的位置,将其备份,......)并且最好避免。 (6认同)
  • 还值得注意的是,删除(通过 `rm` 或 `unlink()`)硬链接只会减少链接计数,直到链接计数达到零,当文件内容占用的块被释放时。我不确定说“硬链接实际上是同一个文件的两个实例”是否严格正确,因为两个 *names* 指向同一个 inode,因此指向相同的内容,而不是文件的两个实例自己在任何意义上。 (3认同)
  • 我喜欢这个答案,但实际上它在理解 Windows 快捷方式是什么方面很差。下面的@Shaakunthala 有更好的响应,因为 Windows 快捷方式更像是 Linux .desktop 文件而不是符号链接。 (2认同)

小智 18

软链接和硬链接是什么有很好的解释,但有一点需要澄清。

的Windows快捷方式是相同或相似既不是 软链接,也没有硬链接。在文件系统级别,它们只是文件。shell 理解它们的结构并将它们解释为链接。Windows 快捷方式还可以指向 shell 命名空间中与文件系统(打印机、控制面板项目、虚拟文件夹)无关的对象。

除了文件系统对象的名称外,Windows 快捷方式还包含以下信息:PIDL(外壳命名空间内的不透明二进制“路径”)、描述、热键、图标、工作目录。如果使用 NTFS 文件系统,Windows 还会添加 NTFS 对象标识符,以修复损坏的快捷方式。

大致相当于 Windows 快捷方式的是.desktop文件。在 SuperUser 上看到这个问题:Linux 中是否有等效的 .lnk?


小智 6

不。在 Linux 中,事情的运作方式不同。

每个文件都由一个名为“inode”的对象表示。每个 inode 都有一个与之关联的编号 (ID)。

众所周知,人类不擅长记住数字,而擅长记住名字。(这就是电话簿的演变方式)

因此,文件名出现在图片中,为每个 inode 提供一个人类可读的名称。基本上,硬链接将文件名绑定到 inode。一个 inode 可以有多个硬链接。如果特定 inode 没有硬链接,则可能会为新文件重新分配 inode 使用的磁盘空间。这意味着,每个文件必须至少有一个硬链接。文件名(可视化为您在文件浏览器中看到的文件名/图标)本身是一个硬链接。

在 Windows 中,快捷方式是一个单独的文件(*.lnk 文件)。它包含有关原始文件的信息(可以理解为文件路径)。在 Linux 中,Windows 快捷方式将是另一个硬链接到以“.lnk”结尾的文件名的 inode。

  • NTFS 实际上非常像这样工作。文件是 MFT 中的一个条目,目录条目只是将文件名映射到文件 ID。它支持硬链接,从 2008/7/Vista(?) 开始,甚至支持符号链接。在这一点上,最大的区别是文化。 (3认同)