我试图理解..
(双点)的本质。它似乎指向不同的目标,具体取决于您访问它的方式。
例子:-
/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 -ail
在inner
.
当执行ls -ail
在middle
middle
当执行ls -ail
在outer
现在,/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
上面一样)使用物理路径。