符号链接和硬链接有什么区别?

符号链接和硬链接有什么区别?

你什么时候会使用其中一种而不是另一种?

答案1

硬链接和软链接之间不同的语义使它们适用于不同的事物。

硬链接:

  • 与其他目录条目无法区分,因为每一个目录项是硬链接
  • 可以移动或删除“original”,而不会破坏同一 inode 的其他硬链接
  • 只能在同一文件系统中使用
  • 权限必须与“原始”上的权限相同(权限存储在 inode 中,而不是目录项中)
  • 只能做成文件,而不是目录

符号链接(软链接)

  • 只是记录指向另一个文件路径。 (ls -l将显示符号链接指向的路径)
  • 如果原件被移动或删除,将会中断。 (在某些情况下,实际上希望链接指向当前占据特定位置的任何文件)
  • 可以指向不同文件系统中的文件
  • 可以指向一个目录
  • 在某些文件系统格式上,符号链接可能具有与其指向的文件不同的权限(这种情况并不常见)

答案2

这两种链接的目的都是提供一种让文件同时出现在两个位置的方法。这有很多用途。十有八九你会想使用符号链接。

符号链接或“符号链接”的工作方式有点像 Windows 快捷方式。符号链接的内容是指向文件/目录实际位置的指针。如果删除真实文件,符号链接将变为“悬空”,并且无法工作。删除符号链接不会删除实际文件。您可以根据需要拥有任意多个指向单个文件的符号链接(甚至其他符号链接)。

但与 Windows 不同的是,它们在文件系统级别工作,而不是 shell 或应用程序级别,因此几乎任何应用程序都会按预期“遵循”符号链接。 ls -al可以用作查看符号链接“指向”何处的快速方法。

硬链接甚至可以在较低级别上工作。硬链接是文件的实际物理文件系统级目录条目。从技术上讲,目录条目是一个硬链接,因此每个文件在目录中的某个位置至少有一个硬链接。硬链接与它们指向的文件并不分离;如果一个文件在不同的目录中有多个硬链接,则使用类似的实用程序删除硬链接rm不会真正删除该文件,直到所有硬链接都消失。

我想不出使用硬链接是常见的,甚至是需要的,除非您故意想要防止文件被删除或者正在对分区或其他文件系统相关的事情进行一些奇怪的低级工作。编辑:不过,这个问题的其他答案中有很好的想法!

答案3

硬链接对于基于磁盘的备份机制非常有用,因为您可以为每个备份拥有完整的目录树,同时共享未更改的文件的空间 - 并且文件系统会跟踪引用计数,因此当最后一次引用时由于备份因空间原因而过期/删除,给定版本消失了,它使用的空间会自动回收。出于同样的原因,某些邮件客户端也将其用于归档到多个文件夹的邮件。

答案4

硬链接只是对相同磁盘空间的引用,这就是为什么你不能硬链接其他文件系统中的某些内容。

符号链接是链接其他文件的文件(作为 Windows 快捷方式),可能在同一文件系统中,也可能不在同一文件系统中。

编辑:我会解释更多内容。每个存在的文件至少有 1 个硬链接。硬链接是道路访问文件系统的索引节点的内容。您可以通过 获取文件的 inode 号ls -i,并通过 获取硬链接数,stat本示例如下:

$ stat plantilla-disenos.odt 
  File: «plantilla-disenos.odt»
  Size: 12367       Blocks: 32         IO Block: 4096   fichero regular
Device: 803h/2051d  Inode: 319875      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   d4rio)   Gid: ( 1000/   d4rio)
Access: 2011-02-11 21:36:19.000000000 -0300
Modify: 2010-03-02 23:27:28.000000000 -0300
Change: 2010-04-10 17:46:27.000000000 -0300

感谢@geekosaur 提供此参考:

内核必须重新启动路径名到索引节点的转换(遍历目录树)以扩展符号链接,而硬链接都使用相同的索引节点。 (您经常会看到它被称为 namei,来自传统 Unix 中执行此操作的内核函数的名称。)

和这个(编辑):

硬链接对于基于磁盘的非常有用增加的备份机制就像苹果的时间机器,因为您可以为每个备份拥有一个完整的目录树,同时共享未更改的文件的空间 - 并且文件系统会跟踪引用计数,因此当对给定版本的最后一个引用因备份过期而消失时/由于空间原因被删除,它使用的空间将被自动回收。出于同样的原因,某些邮件客户端也将其用于归档到多个文件夹的邮件。

干杯

相关内容