Symbolic Link, “”链接的限制

这里我们要面对一个普遍被混淆了的概念。这个混淆甚至在 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
$

但是符号链接之所以存在是因为它们打破了一些普通(“”)链接的限制。

因此,符号链接在一些场合非常有用,人们甚至习惯在可以使用普通链接的地方使用它。不过普通链接具有一个优点:您并不会因为删除“原始链接”而失去文件。

最后,如果您仔细观察,您会发现符号链接和它包含的字符串的大小完全一致。