Unix中的硬链接和符号链接

nam*_*ked 8 unix symlink hardlink

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

我跑了命令:

ln source hardlink
ln -s source softlink
Run Code Online (Sandbox Code Playgroud)

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

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

问候,darkie15

pax*_*blo 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
Run Code Online (Sandbox Code Playgroud)

我只使用了inode编号的最后四位数来保持条目简短(并没有用inode数字来打你43910096366994672),但是你可以看到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
Run Code Online (Sandbox Code Playgroud)

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