pwd是唯一专用于显示当前工作目录的命令,因其语义明确、实时可靠;ls仅列出文件不显示路径,cd无输出,echo $PWD依赖可能过期的环境变量,而/bin/pwd比内建pwd更可信地验证目录真实性。

直接用 pwd 命令就行,这是唯一专用于显示当前工作目录的命令。
为什么不是 ls、cd 或其他命令?
很多人会下意识用 ls 看当前有哪些文件,但那只是列出内容,不告诉你“我在哪”;cd 是切换目录的,执行后不输出路径;where、md、rd 根本不是 Linux 原生命令,要么拼错,要么是 Windows 习惯带过来的。
-
ls:只显示当前目录下的文件名,路径信息为零 -
cd:无输出,执行成功也不告诉你现在在哪 -
echo $PWD虽然也能打印路径,但它依赖 shell 变量,而变量可能被手动修改或未及时更新(比如删掉当前目录后仍显示旧路径) - 只有
pwd是专为此任务设计的,实时、可靠、语义明确
pwd 默认行为和两个关键选项
运行 pwd 不加参数时,它其实等价于 pwd -L —— 显示“逻辑路径”,也就是你 cd 进去时经过的路径,可能包含符号链接。
但如果你需要真实物理位置(比如调试软链接问题),就得加 -P:
pwd -P
常见场景:
- 你
cd /var/mail,而/var/mail是指向/var/spool/mail的软链接 →pwd输出/var/mail,pwd -P输出/var/spool/mail - 脚本中做路径判断时,用
pwd -P更安全,避免因符号链接导致后续cp或find行为异常 -
pwd -L和pwd效果一样,一般不用显式写
内建命令 vs 外部命令:为什么有时 /bin/pwd 和 pwd 结果不同?
bash 自带内建 pwd,它读取并信任环境变量 $PWD;而 /bin/pwd(GNU coreutils 版本)会绕过变量,直接查 inode 和目录结构。
这就导致一个经典坑点:
- 你在
/tmp/test中,然后有人或脚本把/tmp/test目录删掉了 - 此时
pwd仍会输出/tmp/test(因为它只回显$PWD) - 但
/bin/pwd会报错:couldn't find directory entry in '..' with matching i-node - 这意味着:你当前 shell 的工作目录已失效,再执行
cp、touch等操作大概率失败
所以,当怀疑目录状态异常时,用 /bin/pwd 验证比 pwd 更可信。
真正容易被忽略的不是怎么输命令,而是——pwd 显示的路径未必代表你能正常操作那个位置。尤其在自动化脚本里,别只信 $PWD,该用 /bin/pwd -P 就用。


















