Shell

當我通過符號連結 cd 時,為什麼 pwd 顯示符號連結而不是真實路徑?

  • April 17, 2015

我創建了一個指向ln -s 1 2目錄內的test目錄的軟連結 () 並打開了軟連結 ( cd 2) 並使用pwd. 顯示的路徑是~/test/2和不是~/test/1

在像 Windows 這樣的作業系統中不同,快捷方式將我們帶到真正的目錄。我有點困惑這個軟連結在 Linux 中是如何工作的。它不是像 in 那樣的快捷方式Windows嗎?為什麼路徑不是~/test/1

$ mkdir test
$ cd test
$ mkdir 1
$ ln -s 1 2
$ cd 2
$ pwd
/home/dazz/test/2

這是 shell 的一個特性,它可以記住你是如何到達你所在的位置的。

如果您已realpath安裝,您可以執行以下操作:

$ realpath 
/home/dazz/test/1

如果你有 python,則缺少:

$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1

或 readlink(來自 coreutils):

$ readlink -f .
/home/dazz/test/1

/bin/pwd(不是內置的外殼pwd):

$ /bin/pwd
/home/dazz/test/1

對比pwd/bin/pwd

pwd,這是許多 shell 中的內置命令,它告訴你 shell 認為你在哪裡(因此將符號連結“軟連結”視為真實目錄。

/bin/pwd是一個外部程序,它告訴您您的真實位置,如有必要,通過遍歷文件系統樹直到/. 它不考慮符號連結,因為在向上遍歷時這些符號連結不存在..

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