问题描述
维基百科将hard link定义为:
a directory entry that associates a name with a file on a file system. (A directory is itself a special kind of file that contains a list of such entries.) The term is used in file systems which allow multiple hard links to be created for the same file.
我想知道硬链接的概念是否等同于Windows的Shortcut概念。
如果硬链接不等同于快捷方式,那么最接近硬链接的Windows功能是什么?
最佳解决方案
不,硬链接完全不同。软链接更接近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文件系统上的文件使用inodes存储; inode基本上是文件系统将文件名映射到物理硬盘驱动器上的特定位置的方式。因此,硬链接是指向与其目标相同的inode的文件。另一种说法是,所有文件实际上都是指向其inode的硬链接。对文件建立硬链接只会在文件系统上创建一个指向同一inode的新指针(文件)。每个inode可以有多个指向它的文件或一个或没有。
要更清楚地理解这一点,请使用ls -i
,它显示与文件关联的inode。让我们创建一个软链接和一个硬链接,看看会发生什么:
ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo
现在,检查他们的inode:
如您所见,foo
和HardLinkToFoo
具有相同的inode(16648029),而SoftLinkToFoo具有不同的inode(16648036)。
如果我们用mv foo bar
重命名foo
会怎样?
红色表示断开的软链接,其目标无法再找到。这是因为软链接指向文件的名称,而不是其inode。请注意,尽管更改了名称,但inode保持不变,因此硬链接很好,它仍然有效。
总之,硬链接实际上是同一文件的两种表现形式;它们是指向磁盘同一部分的指针。软链接只是快捷方式。举一个真实世界的比喻,硬链接就像是同一条电话线的两个不同的电话号码,软链接就像在同一个房子里有两条不同的电话线。
次佳解决方案
对于软链接和硬链接有一个很好的解释,但有一点需要澄清。
Windows快捷方式与软链接和硬链接等效或类似。在文件系统级别,它们只是文件。它是了解其结构并将其解释为链接的shell。 Windows快捷方式还可以指向shell命名空间中与文件系统无关的对象(打印机,控制面板项,虚拟文件夹)。
Windows快捷方式除了文件系统对象的名称外,还包含以下信息:PIDL(shell命名空间内的opaque二进制”path”),描述,热键,图标,工作目录。如果使用NTFS文件系统,Windows还会添加NTFS对象标识符,以修复损坏的快捷方式。
Windows快捷方式的粗略等效项是.desktop文件。在SuperUser上看到这个问题:Is there an equivalent of .lnk in Linux?
第三种解决方案
不。在Linux中,工作方式不同。
每个文件由一个名为’inode’的对象表示。每个inode都有一个与之关联的数字(ID)。
我们知道人类不善于记住数字而是名字。 (这就是电话簿的演变方式)
因此,文件名进入图片,为每个inode提供一个人类可读的名称。基本上,硬链接将文件名绑定到inode。 inode可以有多个硬链接。如果特定inode没有硬链接,则inode使用的磁盘空间可能是新文件的re-allocated。这意味着,每个文件必须至少有一个硬链接。文件名(可视化为文件浏览器中显示的文件名/图标)本身就是一个硬链接。
在Windows中,快捷方式是一个单独的文件(* .lnk文件)。它包含有关原始文件的信息(可以理解为文件路径)。在Linux感知中,Windows快捷方式是另一个inode硬链接到以’.lnk’结尾的文件名。
第四种方案
在Windows上,如果您有NTFS文件系统,也可以创建硬链接。
fsutil hardlink create target_file source_file
文件必须位于同一逻辑驱动器上。