维基百科将硬链接定义为:
一个目录条目,将名称与文件系统上的文件关联起来(目录本身是包含此类条目列表的一种特殊类型文件)。该术语用于允许为同一文件创建多个硬链接的文件系统。
我想知道硬链接的概念是否等同于Windows中的快捷方式。
如果硬链接不等同于快捷方式,那么最接近硬链接的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
ls -i
命令显示与文件关联的inode。让我们创建一个软链接和一个硬链接,看看会发生什么:ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo
foo
和HardLinkToFoo
具有相同的inode(16648029),而SoftLinkToFoo则有一个不同的inode(16648036)。mv foo bar
将foo
重命名为bar
,会发生什么呢?
rm
或unlink()
删除硬链接只会将链接计数减少到零,当链接计数达到零时,文件内容所占用的块才会被释放。我不确定说“硬链接实际上是同一个文件的两个实例”是否严格正确,因为这两个名称指向同一个inode,从而指向相同的内容,而不是以任何方式存在两个文件实例。 - Emmethardlink
是硬链接,请执行echo "foo" >> hardlink
。然后打开原始文件,你会看到foo
已经被添加进去了。 - terdon关于软链接和硬链接有一个很好的解释,但有一点需要澄清。
Windows的快捷方式既不等同于软链接也不等同于硬链接。在文件系统级别上,它们只是文件。只有Shell能理解它们的结构并将其解释为链接。Windows快捷方式还可以指向与文件系统无关的Shell命名空间中的对象(如打印机、控制面板项、虚拟文件夹)。
除了文件系统对象的名称外,Windows快捷方式还包含以下信息:PIDL(Shell命名空间中的不透明二进制“路径”)、描述、热键、图标、工作目录。如果使用NTFS文件系统,Windows还会添加NTFS对象标识符来修复损坏的快捷方式。
Windows快捷方式的大致等价物是.desktop文件。请参阅SuperUser上的这个问题:Linux中是否有类似.lnk的等价物?
fsutil hardlink create target_file source_file
subst
命令创建的驱动器号。一个工具可能不知道或不关心这一点,因此可能会拒绝创建硬链接。非常有用的一个工具是Link Shell Extension,它使资源管理器能够创建硬链接。 - Tobias