Filesystems

點點 (..) 到底是什麼?為什麼它的行為與符號連結不同?

  • December 28, 2016

我試圖了解..(雙點)的性質。它似乎指向不同的目標,具體取決於您訪問它的方式。

例子:-

   /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 -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邏輯工作目錄 ( ) 與您的物理工作目錄 ( ) 不同。在這種情況下,將帶您回到不是因為有不同的條目,而是因為您的 shell 正在跟踪您的邏輯工作目錄並將您彈出一個級別,而不是引用.inner``pwd -L``pwd -P``cd ..``outer ..``..``inner

這是例如bash作為內置cd命令的一部分提供的便利。您可以通過要求它更改為實際..條目來覆蓋它

cd -P ..

where-P指示cdpwd如上)使用物理路徑。

引用自:https://unix.stackexchange.com/questions/332681