我只是想澄清一个硬/符号链接是否实际上是一个创建的文件??
我运行了命令:
ln source hardlink
ln -s source softlink
-- ls 命令将这 2 个链接显示为一个文件。
所以我的查询是,是否ln / ln -s
真的创建了一个文件?
问候,darkie15
是的,没有:-)
在 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
不是像 您还可以看到最初创建的文件的内容在删除后仍然存在,因为仍在引用它。f2
f3
f1
f2
但是,因为f3
引用的是f1
名称而不是它的 inode,所以在尝试使用它时会出错。
旁白:当 UNIX 像这样玩弄你时,你一定会喜欢它:
$ ls f*
f2 f3
$ cat f3 # What the ...?
cat: f3: No such file or directory
几乎和创建一个名为的文件spacebackspacex然后看着有人尝试删除它一样有趣:-)
没有人创建文件。
磁盘上的文件由“inode”标识。目录将文件名映射到 inode。硬链接意味着“在此目录中创建一个新文件名,该文件名指向与我命名的文件相同的 inode”。
符号链接意味着“在此目录中创建一个新文件名,该文件名指向其他文件指向的任何 inode。”
正如 mangoman 在评论中指出的那样,符号链接确实会创建一个带有链接目标名称的文件,但您不应该注意它。这是一个与您无关的特殊文件。