理解链接的最好方法是看一个例子。下面让我们创建一个(普通)文件:
$ pwd /home/zhang/example $ ls $ touch a $ ls -il a 32555 -rw-r--r-- 1 zhang zhang 0 Aug 6 19:26 a
ls 命令中的 -i
选项用来打印信息节点号。信息节点号是输出的第一项。像您看到的那样,在我们创建文件 a
之前,目录里没有文件。输出的第三项也很有意思,这是文件链接(实际是信息节点链接)的数目。
$ ln a b $ ls -il a b 32555 -rw-r--r-- 2 zhang zhang 0 Aug 6 19:26 a 32555 -rw-r--r-- 2 zhang zhang 0 Aug 6 19:26 b $
我们建立了一个指向相同信息节点的链接。像您看到的那样,我们并没有建立叫做 b
的文件。我们只是在相同目录下增加了另外一个一个指向32555号信息节点的链接并把它取名为 b
。您可以通过 ls -l 的输出看到对信息节点的链接计数现在已经从1变成了2。
$ rm a $ ls -il b 32555 -rw-r--r-- 1 zhang zhang 0 Aug 6 19:26 b $
我们看到即使删除了“原始文件”,信息节点仍然存在。但是现在,唯一指向它的链接是叫做 /home/zhang/example/b
的文件。
因此,一个 UNIX® 中的文件是没有名字的,取而代之的是,它有一个或几个存在于一个或几个目录下的链接。
目录本身也由信息节点存储,它们的链接计数和它们拥有的子目录数相同。这是因为每个目录里至少有两个链接:目录本身(.
)和它的父目录(..
)。因此,含有两个子目录的目录将至少拥有四个链接:.
、..
以及其中的每个子目录。
网络连接是典型的没有被链接(即没有名字)的文件;不论您在哪个目录里寻找,您都永远不会在文件树里看到对应 Mandriva Linux 网站 连接的文件。相似地,当您在 shell
里使用管道的时候,对应于管道的信息节点是存在的,但是它没有被链接。临时文件是另外一种没有名字的信息节点。您创建临时文件,打开它,然后删除它。文件从被打开的那一刻起就存在了,但是没有别的用户可以打开它(因为它没有名字来让别人打开它)。这样的话,如果应用程序崩溃,临时文件会被自动删除。