Unix:为什么原始文件被删除后软链接文件仍然指向原始文件?

Unix:为什么原始文件被删除后软链接文件仍然指向原始文件?

我有一台 Windows 7 64 位 PC。我在 c:\cygwin64 目录中安装了 Cygwin 版本 2.6.0。

我有一个名为的文件文件1。为此我创建了一个名为文件1_soft1

ls -i -l命令给了我这个输出:

总计 2
3377699721198685 -rw-r--r-- 1 cChappati 域用户 57 1 月 20 日 19:47 file1
37154696926542763 lrwxrwxrwx 1 cChappati 域用户 5 1 月 21 日 10:36 file1_soft1 -> file1

rm file1然后我使用命令成功删除了原始文件。

现在,当我运行ls -i -l命令时,我得到以下输出:

总计 1
37154696926542763 lrwxrwxrwx 1 cChappati 域用户 5 1 月 21 日 10:36 file1_soft1 -> file1

为什么文件1_soft1文件仍然链接到文件1归档时间文件1文件不再存在?

我原本以为文件1_soft1文件也将被删除或变为具有软链接的常规文件文件1文件已删除。但这些都没有发生。

谢谢

答案1

为什么当 file1 文件不再存在时,file1_soft1 文件仍然链接到 file1 文件?

Windows 文件系统不监视链接以查看链接到的文件是否已被删除。

这样做会增加一些相当大的开销:

  • 维护所有链接的列表

  • 定期检查列表以查看链接的文件是否已被删除。

视窗:

  • 用于创建文件软链接的 Windows 命令(链接捷径)都可以创建链接到不存在的目 标。

Unix:

  • 创建软链接的 Unix 命令(-s)还可以创建链接到不存在的目 标。

    $ ll
    total 0
    $ ln -s target dummy
    $ ll
    total 1
    lrwxrwxrwx 1 DavidPostill None 6 Jan 21 16:19 dummy -> target
    $ cat dummy
    cat: dummy: No such file or directory
    $
    

    如果删除仍然存在符号链接的文件,则操作rm将会成功,但符号链接将保留,并且任何引用它的尝试都将返回“找不到文件”错误。


进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 链接- 创建到目录或文件的符号链接,或者创建硬文件链接或目录连接。
  • 捷径- 创建一个 Windows 快捷方式(.LNK 文件)。

  • Linux 的 Bash 命令行的 AZ 索引- 与 Bash 命令行相关的所有事物的绝佳参考。

  • - 在文件之间建立链接,默认情况下,它会建立硬链接;使用 -s 选项,它会建立符号(或“软”)链接。

答案2

这是因为软链接指向的是路径,而不是文件本身。

您认为链接仍然指向原始文件的假设是错误的。它指向的是原始路径。

这条路径上有什么或是否有东西都无关紧要。如果您创建新文件file1(或甚至可能是具有该名称的目录),链接将指向它。

相关内容