维基百科将硬链接定义为:
将名称与文件系统上的文件相关联的目录条目。(目录本身是一种特殊的文件,其中包含此类条目的列表。)该术语用于允许为同一文件创建多个硬链接的文件系统。
我想知道硬链接的概念是否等同于Windows的快捷方式概念。
如果硬链接不等同于快捷键,那么Windows最接近硬链接的功能是什么?
维基百科将硬链接定义为:
将名称与文件系统上的文件相关联的目录条目。(目录本身是一种特殊的文件,其中包含此类条目的列表。)该术语用于允许为同一文件创建多个硬链接的文件系统。
我想知道硬链接的概念是否等同于Windows的快捷方式概念。
如果硬链接不等同于快捷键,那么Windows最接近硬链接的功能是什么?
Answers:
不,硬链接是完全不同的。软链接更接近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
现在,检查其索引节点:
正如你可以在上面看到,无论是foo
与HardLinkToFoo
具有相同的inode(16648029),而SoftLinkToFoo有一个不同的(16648036)。
如果我们重命名会发生什么foo
用mv foo bar
?
红色表示软链接断开,无法找到其目标。这是因为软链接指向文件的名称,而不是文件的索引节点。请注意,尽管更改了名称,但inode保持不变,因此硬链接很好,它仍然有效。
总之,硬链接实际上是同一文件的两种表现形式。它们是指向磁盘同一部分的指针。软链接只是快捷方式。用现实世界进行类比,硬链接就像是同一条电话线的两个不同电话号码,而软链接就像是在同一座房子中有两条不同的电话线。
rm
或unlink()
)硬链接只会减少链接计数,直到链接计数达到零为止。我不确定说“硬链接实际上是同一文件的两个实例”是否正确,因为这两个名称指向相同的索引节点,因此指向相同的内容,而不是在文件中包含两个实例任何意义。
关于什么是软链接和硬链接,有很好的解释,但需要澄清一件事。
的Windows 快捷方式是相同或相似既不是 软链接,也没有硬链接。在文件系统级别,它们只是文件。外壳了解它们的结构并将它们解释为链接。Windows快捷方式也可以指向与文件系统无关的外壳名称空间中的对象(打印机,控制面板项目,虚拟文件夹)。
Windows快捷方式除了文件系统对象的名称外,还包含以下信息:PIDL(外壳名称空间中的不透明二进制“路径”),描述,热键,图标,工作目录。如果使用NTFS文件系统,Windows还会添加NTFS对象标识符,以修复损坏的快捷方式。
Windows快捷方式的大致等效项是.desktop文件。在SuperUser上看到此问题:Linux中是否有.lnk的等效项?
否。在Linux中,工作原理有所不同。
每个文件由一个称为“ inode”的对象表示。每个索引节点都有一个与之关联的数字(ID)。
众所周知,人类不擅长记住数字,而是记住名字。(电话簿就是这样演变的)
因此,文件名出现在图片中,以便为每个inode赋予易于阅读的名称。基本上,硬链接将文件名绑定到inode。一个索引节点可以具有多个硬链接。如果没有针对特定inode的硬链接,则可以为新文件重新分配inode所使用的磁盘空间。这意味着每个文件必须至少存在一个硬链接。文件名(可视为文件浏览器中显示的文件名/图标)本身是一个硬链接。
在Windows中,快捷方式是一个单独的文件(* .lnk文件)。它包含有关原始文件的信息(可以理解为文件路径)。在Linux感知中,Windows快捷方式将是另一个链接到以'.lnk'结尾的文件名的inode。
在Windows上,如果您有NTFS文件系统,也可以创建硬链接。
fsutil hardlink create target_file source_file
文件必须位于同一逻辑驱动器上。
subst
命令。工具可能对此不了解/不在乎,因此拒绝创建硬链接。一个非常有用的东西是Link Shell Extension,它使资源管理器可以创建它们。
很大的不同是,不能为文件夹创建硬链接,而是为文件创建硬链接。
可以为文件夹创建快捷方式,因此不能说它们是等效的。
您的问题应该是符号链接或软链接 与快捷方式之间的区别。
根据此:
符号链接是文件系统级别的,所有内容都将其视为原始文件。应用程序不需要特殊支持即可使用符号链接。
“快捷方式”只是具有对目标文件或目录的引用的常规文件。
因此,当您单击快捷方式时,会将目录更改为实际文件,而软链接将引用其位置,如同其实际文件一样;对于Linux中的软链接,您可以使用终端和cd来进行符号链接,而不能使用cd来访问快捷方式。
Windows快捷方式和Linux启动器(指向某个位置)将是相同的。