这里我们要面对一个普遍被混淆了的概念。这个混淆甚至在 UNIX® 用户中也非常普遍。这是因为目前我们见过的链接(错误地被称为“硬”链接)都只和普通文件关联(我们已经知道事实并不是这样的 –– ,因为符号链接也是“链接”)。为了澄清概念,我们首先要解释什么是符号链接(“软链接”或甚至经常被称为 “symlink”)。
符号链接是一种特殊类型的文件,它的内容只是一个字符串。它可能指向一个存在的文件也可能什么都不指向。当您在命令行或程序里提到符号链接的时候,您实际上进入了它指向的文件,前提是这个文件是存在的。比如:
$ echo Hello >myfile $ ln -s myfile mylink $ ls -il total 4 169 -rw-rw-r-- 1 zhang zhang 6 Dec 10 21:30 myfile 416 lrwxrwxrwx 1 zhang zhang 6 Dec 10 21:30 mylink -> myfile $ cat myfile Hello $ cat mylink Hello |
您可以看到 mylink 的文件类型是 l,这表示它是一个符号链接。进入权限对符号链接并不重要:它们总是 rwxrwxrwx。您也可以看到它是一个与 myfile 不同的文件,因为它们的信息节点号是不同的。但是它符号化地指向了这个文件,因此当您键入 cat mylink 的时候,您实际将打印 myfile 的内容。我们可以通过如下操作证明符号链接的内容是任意字符串:
$ ln -s "I'm no existing file" anotherlink $ ls -il anotherlink 418 lrwxrwxrwx 1 zhang zhang 20 Dec 10 21:43 anotherlink -> I'm no existing file $ cat anotherlink cat: anotherlink: No such file or directory $ |
但是符号链接之所以存在是因为它们打破了一些普通(“硬”)链接的限制。
因此,符号链接在一些场合非常有用,人们甚至习惯在可以使用普通链接的地方使用它。不过普通链接具有一个优点:您并不会因为删除“原始链接”而失去文件。