全部博文(413)
分类: LINUX
2011-09-19 23:35:59
什么是软链接?
软链接是最容易理解的,因为你很可能已经用到它了。软链接扮演了Windows中快捷方式的角色。简单说来,软链接就是一个指向另一个文件的文件。当你创建一个软链接的时候,你创建的是一个新文件,而该文件存在的意义只是一个指向系统某处的另一个文件的指针。
所有的链接都是用ln命令创建的,如果你要创建软链接就使用-s标志(如果不使用该标志,你会得到一个我即将讲到的硬链接)。该命令的语法是:
ln -s [目标] [链接名]
比如,下面这个命令会创建一个指向/usr/bin/firefox的名叫firefox的链接(在我的“Desktop”目录):
ln -s /usr/bin/firefox ~/Desktop/firefox
现在我们理解了软链接,接下来我们讨论硬链接。
什么是硬链接?
软链接是一个指向已有文件的新文件,而硬链接是原始链接的另一个实例。一张简图是解释这个问题最容易的方式:
你可以点击任意一张图片以查看更大的版本。这些图画所解释的是:当你创建一个硬链接时,你创建的是指向数据位置的另一个指针,而不是指向现有文件的指针。这意味着编辑一个文件的硬链接等价于编辑该文件的原始实例。
把这个问题再讲透彻一点:一个软链接是一个指向已有文件的快捷方式,而一个硬链接是磁盘上某个位置的引用(或者更准确的说,文件系统中的某个位置)。这意味着快捷方式的概念,指向另一个文件的链接,对于硬链接来说是没有意义的。而有意义的则是询问磁盘上一个指定的位置有多少个引用存在(一个文件存在多少个硬链接),你可以通过运行‘stat’命令来看到:
stat /path/to/file
比如,在这个屏幕快照里面,我创建了一个文件,然后为其建立了三个硬链接。当我对其中任意一个文件运行‘stat’命令的时候,会显示其引用数目为4:
因为硬链接是底层文件系统的直接引用,你不能跨文件系统建立硬链接。
你不能用硬链接来链接到一个目录。
在上述的两种情况中,你必须使用软链接,因为很简单,硬链接做不了这个事。在另外一些情况下,虽然硬链接也行,但软链接要比硬链接更好。比如,当你想要创建一个快捷方式,尤其是快捷方式的目标以后可能会改变的情况下,你很可能会选用软链接。举个例子,你有一个应用程序的beta版的启动器,你可能希望使用软链接,这样你就可以很容易地在各个版本之间改变目标。
在其他的大多数情况中(创建一个链接到同一个文件系统的文件时),硬链接应当是首选,基于以下原因:
使用硬链接可以得到少量的性能提升。这是由于硬链接是一个磁盘位置的引用而不是一个指向另一个文件的文件(指向你所需要的真实磁盘位置),硬链接所涉及到的磁盘寻道动作要少一次。
硬链接不占用额外的空间,因为它只是一个简单的指向已有磁盘空间的引用。而创建软链接是创建一个新文件,会消耗掉你文件系统上的少量空间(通常是4KB)。
另外,硬链接更好的一个原因是软链接很容易丢失一个文件的‘主’实例(所有软链接指向的那个文件)。如果原始文件删除了,那么所有的软链接都将变成无效的。而使用硬链接的话,你可以删除任意一个实例,包括原始实例。只要还有一个实例存在,该文件就存在于系统中。