Unix中的硬链接和符号链接

Unix中的硬链接和符号链接,unix,hardlink,symlink,Unix,Hardlink,Symlink,我只是想澄清一下,硬/符号链接是否实际上是创建的文件 我运行命令: ln source hardlink ln -s source softlink --ls命令将这两个链接显示为一个文件 所以我的问题是,ln/ln-s是否真的创建了一个文件 问候,, 黑暗15两个人都不创建文件 磁盘上的文件由“inode”标识。目录将文件名映射到inode。硬链接意味着“在此目录中创建一个新文件名,该文件名指向与文件名相同的inode。” 符号链接意味着“在此目录中创建一个新文件名,该文件名指向其他文件指向

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

我运行命令:

ln source hardlink
ln -s source softlink
--ls命令将这两个链接显示为一个文件

所以我的问题是,
ln/ln-s
是否真的创建了一个文件

问候,,
黑暗15

两个人都不创建文件

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

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

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

是,否:-)

在UNIX中,文件的内容不同于该文件的目录项。您可以让多个目录条目指向相同的内容(查找如何工作的描述),下面是一些棘手的问题:

所有这些目录条目都是相等的。即使一个可能是第一个被创造出来的,也没有什么特别的。如果删除它,内容不会消失,只是目录条目。一旦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编号的最后四位数字来保持条目的简短(并且没有使用像
4391096366994672
这样的inode编号打到您),但是您可以看到
f1
f2
具有完全相同的inode,而
f3
则不同。您还可以看到,最初创建为
f1
的文件的内容在删除后仍然有效,因为
f2
仍在引用它

但是,由于
f3
引用的是
f1
名称而不是其inode,因此尝试使用它时会出现错误


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

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

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

在软链接的情况下,创建一个包含到目标的绝对路径的文件。
rm\
?我不认为退格(^?)会使它变得更复杂:)