☰
Linux 命令大全之 pwd:print working directory 的用法、内建命令与外部命令差异详解
2026/10/3 12:50:00 网站建设 项目流程
  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

导读:本文以 linux-command 仓库中的 pwd 命令文档 为主体,系统讲解 Linux 中pwd(print working directory)命令的双重实现——bash 内建命令与 GNU coreutils 外部命令,深入对比-L与-P两个选项在符号链接场景下的本质差异,并结合仓库内关联的 cd、enable、builtin 文档厘清同名命令的调用优先级。读完你将掌握pwd的全部选项、返回值约定、软链接目录下的实战用法,以及它在 shell 脚本与命令文档体系中的正确引用方式。

命令概述:pwd 是什么

pwd(英文全拼:printworkingdirectory)命令用于显示用户当前所在的工作目录,且以绝对路径显示。它是 Linux 系统中最基础、使用频率最高的命令之一,几乎任何涉及文件路径定位的场景——无论是交互式操作还是 shell 脚本——都离不开它。

在 linux-command 仓库的命令分类中,pwd被归入「磁盘管理」类别,与cd、ls、mkdir、df、du等命令并列,见 README.md。该仓库的 command 目录收录了 600 多个 Linux 命令的手册 Markdown 文档,pwd的完整手册正文即位于 command/pwd.md,本文内容以该文档为骨架展开,并补充仓库内关联文档与源码层面的佐证。

值得特别注意的是:在绝大多数 Linux 发行版中,pwd存在两套实现同时可用——bash shell 的内建命令(builtin)与 GNU coreutils 提供的外部命令(通常位于/usr/bin/pwd)。两者语法相似,但默认行为存在关键差异,这正是使用pwd时最容易踩坑的地方。

内建命令(bash builtin)用法

当你在 bash 中直接输入pwd时,默认执行的是 bash 内建版本。它的相关帮助信息可通过help命令查看(原文档明确指出:该命令是 bash 内建命令,相关帮助请查看help命令)。

概要

pwd [-LP]

选项

-L (默认值)打印环境变量"$PWD"的值,可能为符号链接。 -P 打印当前工作目录的物理位置。

这里需要特别解读两个选项的含义:

  • -L(logical,逻辑路径):直接读取并输出环境变量$PWD的值。由于$PWD是在你通过cd进入目录时由 shell 维护的,因此它记录的是逻辑上的路径——即你“看到”的路径,其中可能包含符号链接名称。
  • -P(physical,物理路径):不依赖$PWD变量,而是通过系统调用解析文件系统,输出目录的物理位置,即解析掉所有符号链接后的真实路径。

返回值

返回状态为成功,除非给出了非法选项或是当前目录无法读取。

注意

  1. 该命令是 bash 内建命令,相关的帮助信息请查看help命令。

外部命令(GNU coreutils)用法

除了内建版本,系统还提供来自 GNU coreutils 包的外部命令pwd,通常路径为/usr/bin/pwd。它的相关帮助信息可通过man pwd或info coreutils 'pwd invocation'查看(原文档明确说明该命令属于GNU coreutils包)。

概要

pwd [OPTION]...

主要用途

  • 显示当前工作目录。

选项

-L, --logical 打印环境变量"$PWD"的值,可能为符号链接。 -P, --physical (默认值)打印当前工作目录的物理位置。 --help 显示帮助信息并退出。 --version 显示版本信息并退出。

注意这里与内建版本的一个关键差异:在 bash 内建pwd中,默认选项是-L(逻辑路径);而在 GNU coreutils 的外部命令pwd中,默认选项是-P(物理路径)。也就是说,同一个不带参数的pwd,走内建实现与走/usr/bin/pwd实现,在符号链接目录下可能输出不同的结果。

返回值

返回状态为成功,除非给出了非法选项或是当前目录无法读取。

注意

  1. 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man pwd或info coreutils 'pwd invocation'。
  2. 启动或关闭内建命令请查看enable命令,关于同名优先级的问题请查看builtin命令的例子部分的相关讨论。
  3. 在不禁用内建且当前环境没有定义pwd函数的情况下,使用/usr/bin/pwd指向coreutils的pwd,使用pwd指向 bash 内建的pwd。

内建与外部命令的选项对照

选项bash 内建 pwdGNU coreutils pwd
默认行为-L(逻辑路径)-P(物理路径)
-L打印$PWD值,可能含符号链接--logical,打印$PWD值,可能含符号链接
-P打印物理位置--physical(默认),打印物理位置
附加选项无--help、--version
帮助信息help pwdman pwd/info coreutils 'pwd invocation'

实战例子

查看当前所在路径

最简单的用法:直接输入pwd即可看到当前所在目录的绝对路径。

[root@localhost var]# pwd /var

进入软链接目录后查看路径

原文档给出了一个非常经典的软链接(symlink)场景:/var目录下存在一个mail -> spool/mail软链接文件。

[root@localhost ~]# cd /var/ # 进入/var目录,该目录下有个 mail 软连接文件 [root@localhost var]# ls -al total 164 ... lrwxrwxrwx 1 root root 10 Oct 17 2015 mail -> spool/mail [root@localhost var]# cd mail/ # 进入 mail 目录,mail 为连接文件。 [root@localhost mail]# pwd # 默认,使用连接文件,直接显示连接文件全路径。 /var/mail

在这个例子中,bash 内建pwd默认使用-L模式,直接打印环境变量$PWD的值,因此输出逻辑路径/var/mail——这个路径中保留了软链接的名称mail。

使用 -P 参数显示物理路径

如果希望看到软链接最终指向的真实文件路径,使用-P参数即可:

[root@localhost mail]# pwd -P /var/spool/mail

-P选项会绕过$PWD变量,直接向文件系统查询当前目录的物理位置,输出/var/spool/mail,即mail软链接真正指向的目录。

深入理解 -L 与 -P 的执行差异

理解-L与-P差异的关键在于:shell 在每次cd成功切换目录时,都会把“逻辑路径”写入环境变量$PWD。因此:

  • pwd -L本质上是“读取变量的值”,它忠实反映你通过什么路径进入当前目录,速度快,且不需要访问文件系统;
  • pwd -P本质上是“问文件系统”,它忽略路径中出现的所有符号链接,返回内核视角下的真实路径。

从仓库内的 cd 命令文档 可以看到,cd自身也提供了对应的-L(默认,切换到符号连接目录)与-P(切换到符号连接指向的物理位置)选项。也就是说,cd决定“你从哪个路径视角进入”,而pwd决定“你以哪个路径视角查看当前所在位置”,二者选项语义完全对齐,配合使用可以精确控制脚本中的路径逻辑。

在 shell 脚本中的典型用法

在实际脚本编写中,pwd -P常用于获取“去符号链接化”的真实路径,例如在定位脚本自身所在目录时:

# 获取脚本所在目录的真实物理路径(解析软链接) SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"

这种写法能确保即使脚本是通过软链接调用的,SCRIPT_DIR也指向真实位置。反过来,如果你希望脚本保持用户视角的逻辑路径(例如日志中记录用户所见的目录),则应使用默认的-L模式。

同名命令的优先级:内建、函数、外部命令

原文档特别强调了一个易被忽略的事实:在不禁用内建且没有定义pwd函数的情况下,输入pwd执行的是bash 内建版本,而/usr/bin/pwd才是 coreutils 的外部版本。

这背后是 shell 的命令解析优先级问题。根据仓库内 builtin 命令文档,同名情况下的优先级顺序为:

builtin 内建命令 > 函数 > 内建命令 > 外部命令

而当你通过enable命令禁用某个内建命令后,优先级会变为:

函数 > 外部命令

具体到pwd,可参考 enable 命令文档 中的示例——enable命令本身支持对pwd进行禁用与重新启用:

# 禁用 pwd 内建命令 enable -n pwd # 查看所有内建命令(无论是否禁用) enable -a # 重新启用 pwd 内建命令 enable pwd

禁用内建pwd后,再输入pwd就会命中$PATH中的/usr/bin/pwd,从而使用 coreutils 实现(其默认行为是-P物理路径)。这就是为什么在不同环境中pwd输出可能不一致的根因,也是排查路径问题时值得留意的一个方向。

关于 $PWD 环境变量

与pwd紧密相关的还有环境变量$PWD。每当cd成功切换目录后,bash 都会同步更新$PWD。在 shell 脚本中,你可以直接通过echo $PWD快速取得当前逻辑路径,其效果等同于内建pwd -L;而pwd -P则额外执行一次文件系统解析,两者在普通目录下结果一致,仅在经过符号链接的路径下产生分歧。

在 linux-command 仓库中的查阅方式

pwd的完整手册正文存放于仓库的 command/pwd.md。该仓库通过脚本将 command 目录下的全部 Markdown 命令文档生成静态网站并提供搜索索引(相关构建脚本见 scripts/dash.mjs),你也可以通过 npm 安装linux-command包后在本地引用这份 Markdown 文档,具体接入方式参见 package.json 与 README.md。阅读pwd时,建议与以下仓库内关联文档配合对照:

  • cd 命令文档:理解cd的-L/-P语义及$PWD、OLDPWD的维护机制;
  • builtin 命令文档:理解同名命令的优先级顺序;
  • enable 命令文档:掌握内建命令的禁用与启用,观察优先级变化;
  • README.md:了解整个命令手册仓库的定位与分类体系。

小结

pwd命令虽小,却承载了「逻辑路径」与「物理路径」两个重要概念,其内建与外部双实现更体现了 Linux 命令体系的层次结构。核心要点归纳如下:

  1. pwd用于显示当前工作目录的绝对路径,全称 print working directory;
  2. bash 内建pwd默认-L(逻辑路径,读取$PWD变量),GNU coreutils 的/usr/bin/pwd默认-P(物理路径);
  3. -L保留符号链接名称,-P显示软链接最终指向的真实目录,脚本中获取真实路径推荐pwd -P;
  4. 两种实现的帮助途径分别为help pwd与man pwd/info coreutils 'pwd invocation';
  5. 内建命令可通过enable -n pwd禁用,从而切换为执行外部命令实现,相关优先级规则见builtin与enable文档。
  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询