Shell
當我通過符號連結 cd 時,為什麼 pwd 顯示符號連結而不是真實路徑?
我創建了一個指向
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
是一個外部程序,它告訴您您的真實位置,如有必要,通過遍歷文件系統樹直到/
. 它不考慮符號連結,因為在向上遍歷時這些符號連結不存在..