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


15

我试图了解..(双点)的性质。似乎根据您访问它的方式指向不同的目标。

例:-

    /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/..。这似乎与上面的行为相矛盾!


请注意,符号链接不是快捷方式。他们更像是指针。
wizzwizz4 2016年

Answers:


35

..是到父目录的硬链接,该父目录是在目录条目中创建的。

如果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/..

在“访问”唯一的局势..通过符号链接,应提供不同的行为,如果你cdinner使用符号链接,让你的逻辑工作目录(pwd -L)不同于你的物理工作目录(pwd -P)。在这种情况下,cd ..带您回到的原因outer 不是因为存在其他..条目,而是因为您的外壳程序正在跟踪逻辑工作目录并弹出一个级别,而不是引用中的实际..条目inner

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

cd -P ..

其中-P指示cdpwd如上)使用物理路径。


啊哈,困惑来自于cd检查。因此,如果我错了,请纠正我,..始终指向物理父对象。如果使用符号链接..,它将指向实际(物理)父对象。混淆仅发生cd在目录中。
user98456 '16

这也解释了秒的行为。非常感谢你。
user98456 '16

3
@Theophrastus再次ls -lai向您显示/..根目录本身(aka /./)。除非文件系统损坏,否则不应有其他情况. == ..:即使将fs安装在某个地方,它也可以得到..(临时)父项的正确信息(因此,发生了一些不可思议的事情,..不仅仅是文件系统表中的简单静态条目)。
2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.