我想澄清一下,硬链接/符号链接实际上是创建的文件吗?
我运行了以下命令:
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
顺便说一句:当UNIX像这样与你戏弄时,你一定会喜欢它:
$ ls f*
f2 f3
$ cat f3 # What the ...?
cat: f3: No such file or directory
创建一个名为spacebackspacex的文件,然后看着别人试图删除它,几乎和编程一样有趣 :-)
rm \<TAB>
?我不认为退格符 (^?) 会让它变得更复杂 :) - unode