Unix中的硬链接和符号链接

时间:2010-05-11 06:03:03

标签: unix hardlink symlink

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

我跑了命令:

ln source hardlink
ln -s source softlink

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

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

此致 darkie15

2 个答案:

答案 0 :(得分: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之类的inode编号来命中你,但你可以看到f1和{{1具有完全相同的inode,而f2是不同的。您还可以看到最初创建为f3的文件内容在删除后仍然存在,因为f1仍在引用它。

但是,由于f2引用了f3名称而不是其inode,因此尝试使用它时会出错。


除此之外:当你和你玩UNIX玩具时,你一定会喜欢它:

f1

创建一个名为 space backspace x 的文件几乎同样有趣,然后看着有人试图删除它: - )

答案 1 :(得分:3)

都没有创建文件。

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

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

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

相关问题