雙根資料夾與單一資料夾

雙根資料夾與單一資料夾

在我的 Linux 機器上,在 bash 中,我可以存取由兩個正斜線表示的「雙根」資料夾:

tomas:~ $ cd /
tomas:/ $ ls
bin/ cdrom@ ...
tomas:/ $ cd //
tomas:// $ ls 
bin/ cdrom@ ...

此資料夾及其子資料夾的內容與「正常」單斜槓根目錄相同。當我訪問其子資料夾時,雙斜線不會消失。此異常不會重複出現三個或更多斜線;這些是根的簡單同義詞:

tomas:// $ cd home/tomas
tomas://home/tomas $ cd ///
tomas:/ $ cd ////
tomas:/ $

這是一個什麼樣的地方?這是一個錯誤嗎?誰能解釋一下異常情況嗎?

答案1

Bash 常見問題 E10:

E10) 為什麼 'cd //' 保留 $PWD 為 '//'?

POSIX.2 在其對「cd」的描述中說或在規範化當前工作目錄時,多個前導斜線可以替換為單一斜線。

我認為這是為了歷史相容性。某些版本的 Unix 和早期的網路檔案系統使用 //hostname/path 形式的路徑來存取伺服器「hostname」上的「path」。

答案2

“這不是一個錯誤,這是一個功能!”

您仍然位於同一根目錄中。我不知道它的起源,但懷疑它可能與構建絕對路徑的字串有關。如果其他人確實知道,請說出來。

答案3

您使用的工具會忽略多個斜杠,並且您始終會進入同一個根資料夾。

答案4

出於路徑名解析目的,多個斜線被視為單一斜線。

您在 shell 提示字元中看到的是 bash PS1 處理的產物(請參閱 bash 線上說明頁中的「提示」部分)。

[root@linux /]# cd /    ; echo $PWD
/
[root@linux /]# cd //   ; echo $PWD
//
[root@linux //]# cd /// ; echo $PWD
/
[root@linux /]# cd //// ; echo $PWD
/

結果只是一個呈現的問題;您始終位於同一個根目錄中。您可以透過查看來檢查這一點/proc/$$/root

[編輯] 好吧,我從來不知道這一點: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 標準未定義“//”的含義,但“///”和更多斜杠等同於“/”。

相關內容