點點 (..) 到底是什麼?為什麼它的行為與符號連結不同?
我試圖了解
..
(雙點)的性質。它似乎指向不同的目標,具體取決於您訪問它的方式。例子:-
/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/..
. 這似乎與上面的行為相矛盾!?
..
是作為目錄條目的一部分創建的父目錄的硬連結。如果您
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
邏輯工作目錄 ( ) 與您的物理工作目錄 ( ) 不同。在這種情況下,將帶您回到不是因為有不同的條目,而是因為您的 shell 正在跟踪您的邏輯工作目錄並將您彈出一個級別,而不是引用.inner``pwd -L``pwd -P``cd ..``outer
..``..``inner
這是例如
bash
作為內置cd
命令的一部分提供的便利。您可以通過要求它更改為實際..
條目來覆蓋它cd -P ..
where
-P
指示cd
(pwd
如上)使用物理路徑。