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


52

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

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

我想知道硬链接的概念是否等同于Windows的快捷方式概念。

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


1
实际上,您共享的Wiki页面上有一些很棒的参考。
eccentricSam

8
Microsoft NTFS支持硬链接,它们与UNIX硬链接非常相​​似。我认为快捷方式是Windows环境中的特殊对象,但与真正的硬
链接

:以下链接提供了一个很好的解释comptb.cects.com/...

3
我认为并行是一种误导,“快捷方式”是“接口”,仅链接具有目标的文本信息的文件,这些信息由接口而非文件系统解释。从命令行来看,它们并不是真正指向文件系统意义上的东西。Windows(或更确切地说是NTFS)具有正确的符号链接,en.wikipedia.org / wiki / NTFS_symbolic_link既不是快捷方式也不是硬链接。我实际上在Windows中使用它们在任何位置都具有Dropbox文件夹,这无法通过快捷方式完成。
alfC 2014年

5
Windows快捷方式文件与Linux .desktop文件非常相似。Linux符号链接和硬链接是完全不同的东西,有时具有相同的目的。
mikebabcock 2014年

Answers:


113

不,硬链接是完全不同的。软链接更接近Windows快捷方式(尽管有一些重要的区别,符号链接比硬链接更类似于Windows快捷方式)。硬链接是另一回事,您几乎不需要。

简要地说,使用此命令创建一个软链接:

ln -s foo bar

如果然后运行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

->方法是bar将一个链接foo。因此,bar例如使用文本编辑器打开实际上会打开单独的文件foo。但是,删除bar只会删除快捷方式,不会影响文件foo

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

ln foo bar

如果您现在运行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

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

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

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

现在,检查其索引节点:

在此处输入图片说明

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

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

在此处输入图片说明

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

总之,硬链接实际上是同一文件的两种表现形式。它们是指向磁盘同一部分的指针。软链接只是快捷方式。用现实世界进行类比,硬链接就像是同一条电话线的两个不同电话号码,而软链接就像是在同一座房子中有两条不同的电话线。


6
@Kiwy恰恰相反:绝对符号链接会以许多不同的方式失败(一旦您将数据四处移动,将其安装到其他位置,进行备份等等),就最好避免这样做。
吉尔斯(Gillles)“所以-别再邪恶了”

3
还值得注意的是,当释放文件内容占用的块时,删除(通过rmunlink())硬链接只会减少链接计数,直到链接计数达到零为止。我不确定说“硬链接实际上是同一文件的两个实例”是否正确,因为这两个名称指向相同的索引节点,因此指向相同的内容,而不是在文件中包含两个实例任何意义。
Emmet

7
请注意,Windows快捷方式是Shell使用的文件,因此可以执行Shell知道的操作,但不能执行文件系统的操作。例如,您可以在外壳名称空间(例如控制面板,计算机等)中创建快捷方式,或者可以对尚未安装的应用程序(将在首次使用时安装)进行快捷方式设置。这些东西在文件系统世界中没有直接等效的东西。
2014年

2
我喜欢这个答案,但实际上它在理解Windows快捷方式方面很差。下面的@Shaakunthala具有更好的响应,因为Windows快捷方式更像Linux .desktop文件而不是符号链接。
mikebabcock 2014年

18

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

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

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

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


6

否。在Linux中,工作原理有所不同。

每个文件由一个称为“ inode”的对象表示。每个索引节点都有一个与之关联的数字(ID)。

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

因此,文件名出现在图片中,以便为每个inode赋予易于阅读的名称。基本上,硬链接将文件名绑定到inode。一个索引节点可以具有多个硬链接。如果没有针对特定inode的硬链接,则可以为新文件重新分配inode所使用的磁盘空间。这意味着每个文件必须至少存在一个硬链接。文件名(可视为文件浏览器中显示的文件名/图标)本身是一个硬链接。

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


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

2

在Windows上,如果您有NTFS文件系统,也可以创建硬链接。

fsutil hardlink create target_file source_file

文件必须位于同一逻辑驱动器上。


没错-NTFS也支持硬链接。通常,这些工具要求您具有管理员权限才能创建它们。关于“相同的逻辑驱动器”-确切地说,它们需要位于同一文件系统上。一个逻辑驱动器可以是任何东西,包括创建一个驱动器号subst命令。工具可能对此不了解/不在乎,因此拒绝创建硬链接。一个非常有用的东西是Link Shell Extension,它使资源管理器可以创建它们。
Tobias

1

很大的不同是,不能为文件夹创建硬链接,而是为文件创建硬链接。

可以为文件夹创建快捷方式,因此不能说它们是等效的。

您的问题应该是符号链接软链接快捷方式之间的区别。

根据此:

符号链接是文件系统级别的,所有内容都将其视为原始文件。应用程序不需要特殊支持即可使用符号链接。

“快捷方式”只是具有对目标文件或目录的引用的常规文件。

因此,当您单击快捷方式时,会将目录更改为实际文件,而软链接将引用其位置,如同其实际文件一样;对于Linux中的软链接,您可以使用终端和cd来进行符号链接,而不能使用cd来访问快捷方式。

Windows快捷方式和Linux启动器(指向某个位置)将是相同的。


2
什么?软链接只是文件,尽管很奇怪,但它们也占用inode。它们不被视为原始文件(硬链接)。的确,在大多数操作系统中,目录不允许使用硬链接,但这只是一项安全功能,并且有例外(例如OSX时光机)。当然,您可以使用CD快捷方式(我假设您是指Windows快捷方式,因为正如您所说的那样,您可以使用CD链接到soflinks)。
terdon

1
您确定可以使用cmd cd到快捷方式。
马钱

1
我刚刚启动了Windows VM,并在桌面上创建了文件夹的快捷方式,Windows快捷方式与符号链接非常相​​似(如果不相同)。虽然由于某些原因无法使用cmd.exe对其进行cd刻录,但是您可以在目录中创建.lnk并通过资源管理器使用它。
terdon

1
不赞成投票的选民应该给出不赞成投票的理由
2014年

5
抱歉,仍然不正确。符号链接是包含目标文件的纯文本文件(请参见此处),符号链接被视为原始文件,这就是符号链接和硬链接之间的全部区别。Linux启动器(我假设您是指.desktop文件)与此根本无关,它们是完全不同的。就像您自己说的那样,Windows快捷方式可以指向文件(包括程序)和文件夹(mac和Windows有文件夹,Linux有目录)。desktop文件仅允许您启动程序。他们没有链接到任何地方。
terdon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.