我创建了一个ln -s 1 2
指向目录内部目录的软链接()test
,并使用打开软链接(cd 2
)并显示当前路径pwd
。显示的路径是~/test/2
,不是~/test/1
。
在 Windows 这样的操作系统中则不同,快捷方式将我们带到真实的目录。我有点困惑这个软链接在 Linux 中是如何工作的。这不是像中那样的快捷方式吗Windows
?为什么路径不是~/test/1
?
$ mkdir test
$ cd test
$ mkdir 1
$ ln -s 1 2
$ cd 2
$ pwd
/home/dazz/test/2
答案1
这是 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
(不是 shell 内置的pwd
):
$ /bin/pwd
/home/dazz/test/1
答案2
对比pwd
和/bin/pwd
。
pwd
,这是许多 shell 中的内置命令,它告诉您 shell 认为您所在的位置(因此将符号链接“软链接”视为真正的目录。
/bin/pwd
是一个外部程序,如果有必要,它可以通过遍历文件系统树来告诉您实际位置/
。它不考虑符号链接,因为向上遍历时这些符号链接不存在..
答案3
其他答案已经涵盖了/bin/pwd
与 shell 的builtin pwd
.
如果您想遵循您提到的 Windows 风格的符号链接,请使用cd -P
: 它将相应地更改 PWD 变量。
如果您想-P
默认使用,您可以将此行添加到您的.bashrc
或.zshrc
:
set -P
其他外壳可能有所不同。