正如标题所说,我想知道命令创建的硬链接和软链接之间的区别ln
。该命令man ln
确实提供了信息,但不足以回答我的问题。
此外,如果有人可以提供一种设置,使得硬链接比符号链接更可取,那就太好了。
答案1
而且,“一个例子胜过一百段文字...”
创建两个文件:
$ 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
则只是指向不存在文件的链接。
来源:公然抄袭堆栈溢出!
答案2
硬链接不是指向文件的指针,而是指向同一 inode 的目录条目(文件)。即使您更改了另一个文件的名称,硬链接仍会指向该文件。如果您用新版本(通过复制)替换另一个文件,硬链接将不会指向新文件。您只能在同一个文件系统内拥有硬链接。使用硬链接时,您没有原始文件和链接的概念,它们都是平等的(将其视为对对象的引用)。这是一个非常低级的概念。
另一方面,符号链接实际上指向另一个路径(文件名);每次通过符号链接访问文件时,它都会解析文件的名称。如果您移动文件,符号链接将不会跟随。如果您用另一个文件替换该文件,保留名称,符号链接将指向新文件。符号链接可以跨越文件系统。使用符号链接,您可以非常清楚地区分实际文件和符号链接,除了指向文件的路径外,符号链接不存储任何信息。
答案3
在 Linux/Unix 中,快捷方式称为链接
链接有两种类型:软链接(符号链接)或硬链接。
软链接(符号链接)
您可以创建文件和目录的链接,并且可以在不同的分区上创建具有与原始文件不同的 inode 编号的链接(快捷方式)。
如果真实的副本已删除,链接不管用。
硬链接
硬链接仅适用于文件;您不能链接到具有不同 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
。
ls -i # Shows you the inode
5898242 firefox
ln /scripts/firefox /scripts/on-fire
( Source ) ( Destination )
如您所见,它具有相同的 inode。如果我删除原始文件,链接仍然有效,并且它将充当原始文件。
上面,我检查链接是否正常工作,然后删除原始的 Firefox 脚本。
问题:如果有人可以提供一种设置,使得硬链接比符号链接更可取,那就太好了。
回答:根据磁盘分区布局,硬链接存在以下限制:它们必须位于同一分区(-1 分)并且只能链接到文件(-1 分),但如果删除原始文件,则链接将起作用并且其作用与原始文件一样(+1 分)。
另一方面,软链接可以指向目录或文件(+1 分),并且没有分区限制(+1 分),但如果删除源,链接将不起作用(-1 分)。
答案4
硬链接只能在同一个文件系统上工作,它只是同一个 inode 的不同名称(文件由 inode 内部引用)。只有当指向其 inode 的最后一个链接消失时(您rm
删除或unlink
删除最后一个链接),文件才会从磁盘中删除。硬链接通常仅适用于文件,而不适用于目录。
符号链接 (symbolic link) 是一种包含指向另一个文件的路径的特殊文件。此路径可以是绝对路径,也可以是相对路径。符号链接可以跨文件系统工作,甚至可以指向不同的文件,例如,如果您拔下外部硬盘驱动器并将其替换为另一个在同一路径上具有不同文件的硬盘驱动器。符号链接可以指向文件或目录。