点点 (..) 到底是什么?为什么它的行为与符号链接不同?

点点 (..) 到底是什么?为什么它的行为与符号链接不同?

我试图理解..(双点)的本质。它似乎指向不同的目标,具体取决于您访问它的方式。

例子:-

    /outer/
        middle/
            inner/
        inner --> ./middle/inner/

现在,/outer/middle/inner/..导致/outer/middle/,但如果我通过符号链接访问它,/outer/inner/..则会导致/outer/。这里似乎有两个不同..

究竟是什么..?符号链接?硬链接?还是根据访问目录时的路径动态生成的?或者也许我对符号链接的理解是错误的。

编辑:

其他相关观察

    /outer/
        middle/
            file
            inner/
               f --> ./../file
        inner --> ./middle/inner/

现在,如果我尝试通过它访问文件,/outer/inner/f它就可以工作。但它不应该,因为/outer/inner/../file它不指向文件。该文件位于/outer/middle/inner/...这似乎与上面的行为相矛盾!?

答案1

..是一个硬链接到作为目录条目的一部分创建的父目录。

如果您ls -ail在每个目录中发出问题,您应该会看到以下条目都具有相同的inode(第一个字段)和硬链接计数(第三个字段):

  • ..当执行ls -ailinner
  • .当执行ls -ailmiddle
  • middle当执行ls -ailouter

现在,/outer/middle/inner/.. 通向/outer/middle/,但如果我通过符号链接访问它,/outer/inner/.. 通向/outer/。看来这里有两个不同的..。

..中有一个条目inner。如果您当前的工作目录是outer,您应该会看到相同的结果(目录列表middle

  • ls -al inner/..
  • ls -al middle/inner/..

..通过符号链接“访问”应该提供不同行为的唯一情况是,如果您cd使用inner符号链接,那么您的逻辑工作目录 ( pwd -L) 与您的不同身体的工作目录 ( pwd -P)。在这种情况下,cd ..将带您返回outer 不是因为有一个不同的..条目,但是因为您的 shell 正在跟踪您的逻辑工作目录并将您弹出一级,而不是..引用inner.

这是由例如bash作为内置cd命令的一部分提供的便利。您可以通过要求其更改为实际..条目来覆盖它

cd -P ..

where-P指示cd(与pwd上面一样)使用物理路径。

相关内容