pwd -p 返回真实物理路径,因为它调用getcwd()系统调用逐级解析符号链接并验证文件系统结构;而默认pwd依赖$pwd环境变量,可能仅显示逻辑路径(如软链接路径),不可靠。

用 pwd -P 就能获取当前工作目录的绝对真实物理路径。
为什么 pwd -P 才是“真实物理路径”
默认的 pwd 行为其实取决于 shell 实现和环境变量 $PWD 的缓存状态,不一定反映磁盘上实际位置。比如你通过软链接进入目录:ln -s /var/log mylogs && cd mylogs,此时 pwd 可能输出 /home/user/mylogs(逻辑路径),但文件真正存在 /var/log 里。pwd -P 会逐级解析所有符号链接,跳过中间“捷径”,直接返回底层 inode 所在的真实位置。
脚本中务必用 pwd -P 或 /bin/pwd
在自动化任务中,路径必须可预测、可复现。仅靠 pwd 容易因 shell 缓存或别名干扰出错:
- 如果 ~/.bashrc 里定义了
alias pwd='pwd -L',交互式终端里pwd就永远只显示逻辑路径 -
/bin/pwd是外部命令,不依赖$PWD,始终等价于pwd -P,更可靠 - 写脚本时建议统一用
pwd -P或/bin/pwd,避免行为差异
验证是否真的解析了多层软链
创建嵌套软链接后测试最直观:
ln -s /tmp realdir && ln -s realdir link1 && ln -s link1 link2-
cd link2 && pwd -P应输出/tmp,而不是link2或link1 -
pwd -L则只显示/path/to/link2,完全不展开
注意:当前目录被删后 pwd -P 会失败
若你所在的目录已被 rm -rf 删除,pwd 仍可能显示旧路径(靠 $PWD 缓存),但 pwd -P 会报错:pwd: couldn't find directory entry in '..' with matching i-node。这是正常现象——它说明系统已无法从磁盘结构反向确认该路径存在,反而印证了它的“物理性”和严谨性。











