系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

pwd

显示当前工作目录,区分 shell 维护的逻辑路径与内核返回的物理路径。

补充说明

pwd 有两个来源:shell 内建的 pwd 和 /bin/pwd。内建版本默认使用 $PWD(逻辑路径),-P 时调用 getcwd(3) 取得物理路径;/bin/pwd 是 BSD 实现,同样支持 -L 和 -P。macOS 上没有 GNU 的 --logical、--physical 长选项。

默认的 -L 会保留你进入目录时使用的符号链接路径,所以同一目录经不同链接进入会显示不同结果;-P 会解析路径中的所有符号链接。脚本要拼接真实路径、比较两个目录是否相同,或者要写入配置文件时,用 pwd -P 更稳妥。macOS 的系统卷通过 firmlink 把 /Users 等路径接到数据卷,物理路径偶尔会显示 /System/Volumes/Data/... 形式,这是正常现象。

pwd 不需要参数就能工作,但在目录被删除后,逻辑路径仍可能显示旧值,而 pwd -P 会失败。脚本里不要假设 $PWD 永远与磁盘现状一致。

常用示例

# 当前逻辑路径(可能是符号链接路径)
% pwd

# 解析所有符号链接后的物理路径
% pwd -P

# 对比 shell 内建与 /bin/pwd 的结果
% pwd -L
% /bin/pwd -P

# 用物理路径确认目录真实位置后再执行删除
% target="$(pwd -P)" && printf '%s\n' "$target"

# 检查当前目录的权限与所有者
% ls -ld "$(pwd -P)"

# 查看 shell 记录的 PWD 变量
% printf '%s\n' "$PWD"

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 什么时候 pwd 和 pwd -P 会给出不同结果?
  2. 为什么脚本中直接使用 $PWD 不如执行 pwd -P 可靠?
  3. 当前目录被删除后,两个 pwd 形式分别会怎样?
答案
  1. 当前路径中包含符号链接时,pwd 显示逻辑路径,pwd -P 显示解析后的物理路径。
  2. $PWD 是 shell 变量,可能为空、过期或被环境覆盖;pwd -P 直接向系统查询当前目录。
  3. 逻辑 pwd 可能仍打印旧路径,pwd -P 通常报 No such file or directory。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令