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

正如标题所说,我想知道命令ln创建的硬链接和软链接之间的区别。 命令man ln确实提供了信息,但没有充分回答我的问题。

此外,如果有人可以提供一个设置,其中硬链接可能优于符号链接,那将是很好的。

在Linux / Unix中,快捷方式称为链接


链接有两种类型:软链接(符号链接)或硬链接。

  1. 软链接 (符号链接)

    您可以创建文件和目录的链接,并且可以在不同的分区上创建链接(快捷方式),并使用与原始的不同的inode编号。

    如果删除了真实副本,则链接将不起作用

  2. 硬链接

    硬链接仅用于文件; 您无法使用不同的inode编号链接到不同分区上的文件。

    如果删除了真实副本,则链接将起作用 ,因为它访问真实副本正在访问的基础数据。


问题:如何进行软链接?

答:可以使用ln -s进行软链接; 首先,您需要定义源,然后您需要定义目标。 (请记住,您需要定义源和目标的完整路径;否则它将无法工作。)

  sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1 (----------Source-------) ( Destination ) 

在此处输入图像描述

正如您所看到的,它具有不同的inode,可以在不同的分区上进行。


问题:如何制作硬链接?

答:可以用ln建立硬链接; 首先,您需要定义源,然后您需要定义目标。 (请记住,您需要定义源和目标的完整路径;否则它将无法工作。)

假设我在/script目录中有一个名为firefox /script

  ls -i # Shows you the inode 5898242 firefox ln /scripts/firefox /scripts/on-fire ( Source ) ( Destination ) 

在此处输入图像描述

如您所见,它具有相同的inode。 如果我删除原始链接,链接将起作用,它将作为原始链接。

在此处输入图像描述

上面我检查链接是否正常,然后删除原始的firefox脚本。


你提问:如果有人可以提供一个硬链接可能比符号链接更可取的设置,那就太好了。

:根据磁盘分区布局, 硬链接有限制,它们必须位于同一分区(-1点) ,并且只能链接到文件(-1点) ),但如果原始链接被删除,则+1点链接会起作用,它就像原作一样。

另一方面,软链接可以指向目录或文件(+1点)并且没有分区限制(+1点),但是(-1点)如果删除源,则链接将不起作用。

硬链接不是指向文件的指针,它是指向同一inode的目录条目(文件)。 即使您更改其他文件的名称,硬链接仍指向该文件。 如果用新版本替换另一个文件(通过复制它),硬链接将不会指向新文件。 您只能在同一文件系统中拥有硬链接。 对于硬链接,您没有原始文件和链接的概念,所有都是相同的(将其视为对象的引用)。 这是一个非常低级的概念。

另一方面,符号链接实际上指向另一个路径(文件名); 每次通过符号链接访问文件时,它都会解析文件的名称。 如果移动文件,则符号链接将不会跟随。 如果用另一个文件替换该文件,保留名称,则符号链接将指向新文件。 符号链接可以跨越文件系统。 使用符号链接,您可以非常清楚地区分实际文件和符号链接,它们在其指向的文件的路径旁边不存储任何信息。

“一张图片胜过千言万语。” 图示表示


并且,“一个例子值得一百段…”

创建两个文件:

 $ touch blah1 $ touch blah2 

在其中输入一些数据:

 $ echo "Cat" > blah1 $ echo "Dog" > blah2 

正如所料:

 $cat blah1; cat blah2 Cat Dog 

让我们创建硬链接和软链接:

 $ ln blah1 blah1-hard $ ln -s blah2 blah2-soft 

让我们看看刚刚发生了什么:

 $ ls -l blah1 blah1-hard blah2 blah2-soft -> blah2 

更改blah1的名称无关紧要:

 $ mv blah1 blah1-new $ cat blah1-hard Cat 

blah1-hard指向inode,文件的内容 – 没有改变。

 $ mv blah2 blah2-new $ ls blah2-soft blah2-soft $ cat blah2-soft cat: blah2-soft: No such file or directory 

无法找到文件的内容,因为软链接指向已更改的名称,而不是内容。
同样,如果blah1被删除,blah1-hard仍然保留内容; 如果删除blah2,则blah2-soft只是指向不存在的文件的链接。


来源:公然从StackOverflow复制它!

两者都是文件的指针; 不同的是指针的种类 。 符号链接按名称指向另一个文件。 它有一个特殊模式位,将其标识为符号链接,其内容是真实文件的名称。 因为它只包含一个名称,该名称实际上不必存在,或者可能存在于不同的文件系统中。 如果替换指定的文件(更改其内容而不影响其名称),则链接仍包含相同的名称,因此现在它指向新文件。 您可以轻松识别符号链接并查看其指向的文件的名称。

硬链接通过inode编号指向文件。 因此,硬链接与文件的名字没有区别。 没有“真实”的名字与硬链接名称; 所有硬链接都是该文件的同名有效名称。 因此,您链接到的文件必须实际存在,并且位于您尝试创建链接的同一文件系统中。 如果删除原始名称,则硬链接仍指向同一文件。 因为所有硬链接对于文件都是同等有效的名称,所以您不能查看一个并查看该文件的其他名称; 要找到这个,你必须查看每个文件并比较它们的inode编号,找到具有相同inode编号的其他名称。

您可以从ls -l的输出中判断文件有多少名称。 文件模式后的第一个数字是链接计数。 具有多于1个链接的文件在某处具有其他名称,相反,链接计数仅为1的文件没有(其他)硬链接。

硬链接只能在同一个文件系统上工作,它只是同一个inode的不同名称(文件由inode内部引用)。 只有当它的inode的最后一个链接消失时,才会从磁盘中删除文件(您可以删除或unlink最后一个链接)。 硬链接通常只适用于文件,而不适用于目录。

符号链接(符号链接)是包含另一个文件路径的特殊文件。 该路径可以是绝对路径或相对路径。 符号链接可以跨文件系统工作,甚至可以指向不同的文件,例如,如果您拔出外部硬盘驱动器并将其替换为另一个文件系统,则在同一路径上具有不同的文件。 符号链接可以指向文件或目录。

来自另一个post的答案之一(现在从post的顶部链接)提到了这个页面 ,我认为这是一个相当不错的中级解释。 如果你迷失在ascii艺术中,这里是tl; dr版本:

  • 标准文件是从文件系统到inode的指针,而inode又指向物理数据。 文件组件存储其到文件系统的链接(实际上是其路径)和指向inode的链接。
  • 硬链接就像文件一样。 它们只是一个直接指向inode的附加指针。
  • 符号链接是将文件系统路径存储到文件的单独文件(包括单独的inode和数据)。

涉及的内核和文件系统透明地翻译所有内容。

基于此:

  • 硬链接仅允许相同的文件系统链接。 符号链接可以指向任何路径。
  • 硬链接(本质上)指向绝对数据。 符号链接可以指向相对路径(例如../parent.file
  • 通过扩展,如果你移动硬链接的目标指针(记住,它本身只是一个指向inode的硬链接),硬链接仍然有效。 移动符号链接的目标通常会破坏符号链接。
  • 解决硬链接会更快但不可估量。 速度的这个微不足道的部分是以不灵活的文件系统为代价的。

我可能会对自己感到困惑但是阅读各种各样的东西,我很难找到标准文件和硬链接之间的区别。 我正在阅读的方式是每个文件都包含一个硬链接(存储文件名),链接到指向物理数据的inode。

添加硬链接只是为inode提供了一个额外的基于文件系统的指针。 是对的吗?

何时使用Soft Link:

跨文件系统链接:如果要跨文件系统链接文件,则只能使用符号链接/软链接。

目录链接:如果要链接目录,则必须使用软链接,因为无法创建指向目录的硬链接。

何时使用硬链接:

存储空间:硬链接占用的空间非常小,因为在创建硬链接时不会创建新的inode。 在软链接中,我们创建一个占用空间的文件(通常为4KB,具体取决于文件系统)

性能:访问硬链接时性能会略好一些,因为您直接访问磁盘指针而不是通过另一个文件。 移动文件位置:如果将源文件移动到同一文件系统上的其他位置,则硬链接仍然有效,但软链接将失败。

冗余:如果你想确保数据的安全性,你应该使用硬链接,就像在硬链接中一样,数据是安全的,直到删除文件的所有链接,而不是软链接,你将失去如果删除了文件的主实例,则为数据。

当您尝试查找“文件名”和硬链接之间的区别时,会出现混淆,因为没有。

您创建的每个文件都包含磁盘上的数据和硬链接 – 这是目录中的文件名和指向磁盘上数据的指针。 故事结局。 当删除最后一个(或唯一的)硬链接时,操作系统知道不再需要该数据。

从中您可以看到实际数据永远不会被删除,只有硬链接。 当它在磁盘上变得足够拥挤时,数据可能会被另一个文件的数据覆盖。 在此之前,已删除文件中的数据可能会被恢复,但如果没有硬链接,则很难找到。

如前所述,符号链接只是告诉你“在名为的文件夹中有一个名为的文件”。 他们指向硬链接。 他们不知道数据在哪里。 硬链接知道这一点。

有关优秀的noob – 和 – 前Windoze –用户友好的解释,有漂亮的图表常见问题解答请查看此页面http://www.geekride.com/hard-link-vs-soft-link/ 。 他们的版权限制阻止我摘录他们的东西,所以我在这里提供链接就足够了。

这是我第二次甚至是第三次尝试抓住软/硬链接的谜团,总是扯下来,并在将来无限期推迟我的理解 – 只要解释和手册页得到深入的解释和inode以及所有的过度技术……

请享用!

这很简单。 文件(和目录!)存储在块设备(HDD或其他)的地址上。 通常,您有一个映射到地址的名称,这就是您获取文件的方式。 硬链接是映射到同一地址的第二个,第三个等名称。 符号链接代替符号 – 名称 – 因此是映射到名字的第二个名称。 就内核而言,一旦它读取了符号链接目标,它就会停止并以目标值作为文件名(或多或少)返回到开头,因此相对符号链接是可能的但是非常无益。 目标名称不在文件系统级别上方使用,除非在用户空间代码中显式查询。