【问题标题】:Hard link and Symbolic links in UnixUnix中的硬链接和符号链接
【发布时间】:2010-05-11 06:03:03
【问题描述】:

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

我运行了命令:

ln source hardlink
ln -s source softlink

-- ls 命令将这两个链接显示为一个文件。

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

问候, 黑暗15

【问题讨论】:

    标签: unix hardlink symlink


    【解决方案1】:

    是的,也不是:-)

    在 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 编号)但您可以看到 f1f2 完全相同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 \ <TAB> ?我看不出退格(^?)如何使它变得更复杂:)
    【解决方案2】:

    两者都没有创建文件。

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

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

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

    【讨论】:

    • 在软链接的情况下,将创建一个包含目标绝对路径的文件。
    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多