8

我只是想澄清一个硬/符号链接是否实际上是一个创建的文件??

我运行了命令:

ln source hardlink
ln -s source softlink

-- ls 命令将这 2 个链接显示为一个文件。

所以我的查询是,是否ln / ln -s真的创建了一个文件?

问候,darkie15

4

2 回答 2

13

是的,没有:-)

在 UNIX 中,文件的内容不同于该文件的目录条目。您可以让多个目录条目指向相同的内容(查找inode以了解其工作原理),这是一个棘手的问题:

所有这些目录条目都是平等的。尽管可能是先创建了一个,但它并没有什么特别之处。如果删除它,内容不会消失,只是目录条目。一旦 inode 有零个指向它的目录条目,内容就会消失(并且所有进程都关闭文件 - 我之前曾试图清理磁盘空间删除日志文件只是为了找到它而被咬过,因为一个进程仍然有文件打开时,即使没有目录条目指向文件内容,也不会恢复文件内容)。

那是硬链接。

软链接有点棘手。他们确实创建了一个“文件”(一个单独的 inode),包含目标文件的路径。而且这些链接并不相等。删除原始文件会给您留下一个指向无处的软链接。

因为 inode 在给定的文件系统上是唯一的,所以硬链接不能引用不同文件系统上的数据。

软链接没有这个限制,因为它们存储的是目标文件的路径,而不是它的 inode。

以下成绩单可能会有所帮助:

$ echo hello >f1
$ ln f1 f2
$ ln -s f1 f3
$ ls -ial f*
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f1
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
    hello
$ cat f2
    hello
$ cat f3
    hello
$ rm f1
$ ls -ial f*
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
    cat: f1: No such file or directory
$ cat f2
    hello
$ cat f3
    cat: f3: No such file or directory

我只使用了 inode 编号的最后四位来保持条目简短43910096366994672(而f1不是像 您还可以看到最初创建的文件的内容在删除后仍然存在,因为仍在引用它。f2f3f1f2

但是,因为f3引用的是f1名称而不是它的 inode,所以在尝试使用它时会出错。


旁白:当 UNIX 像这样玩弄你时,你一定会喜欢它:

$ ls f*
    f2  f3
$ cat f3 # What the ...?
    cat: f3: No such file or directory

几乎和创建一个名为的文件spacebackspacex然后看着有人尝试删除它一样有趣:-)

于 2010-05-11T06:07:32.167 回答
3

没有人创建文件。

磁盘上的文件由“inode”标识。目录将文件名映射到 inode。硬链接意味着“在此目录中创建一个新文件名,该文件名指向与我命名的文件相同的 inode”。

符号链接意味着“在此目录中创建一个新文件名,该文件名指向其他文件指向的任何 inode。”

正如 mangoman 在评论中指出的那样,符号链接确实会创建一个带有链接目标名称的文件,但您不应该注意它。这是一个与您无关的特殊文件。

于 2010-05-11T06:06:44.583 回答