- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
导读:本文以 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变量,而是通过系统调用解析文件系统,输出目录的物理位置,即解析掉所有符号链接后的真实路径。
返回值
返回状态为成功,除非给出了非法选项或是当前目录无法读取。
注意
- 该命令是 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实现,在符号链接目录下可能输出不同的结果。
返回值
返回状态为成功,除非给出了非法选项或是当前目录无法读取。
注意
- 该命令是
GNU coreutils包中的命令,相关的帮助信息请查看man pwd或info coreutils 'pwd invocation'。 - 启动或关闭内建命令请查看
enable命令,关于同名优先级的问题请查看builtin命令的例子部分的相关讨论。 - 在不禁用内建且当前环境没有定义
pwd函数的情况下,使用/usr/bin/pwd指向coreutils的pwd,使用pwd指向 bash 内建的pwd。
内建与外部命令的选项对照
| 选项 | bash 内建 pwd | GNU coreutils pwd |
|---|---|---|
| 默认行为 | -L(逻辑路径) | -P(物理路径) |
-L | 打印$PWD值,可能含符号链接 | --logical,打印$PWD值,可能含符号链接 |
-P | 打印物理位置 | --physical(默认),打印物理位置 |
| 附加选项 | 无 | --help、--version |
| 帮助信息 | help pwd | man 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 命令体系的层次结构。核心要点归纳如下:
pwd用于显示当前工作目录的绝对路径,全称 print working directory;- bash 内建
pwd默认-L(逻辑路径,读取$PWD变量),GNU coreutils 的/usr/bin/pwd默认-P(物理路径); -L保留符号链接名称,-P显示软链接最终指向的真实目录,脚本中获取真实路径推荐pwd -P;- 两种实现的帮助途径分别为
help pwd与man pwd/info coreutils 'pwd invocation'; - 内建命令可通过
enable -n pwd禁用,从而切换为执行外部命令实现,相关优先级规则见builtin与enable文档。
- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
相关推荐
Linux 命令大全:bash 内建命令 `help` 用法详解与速查手册
Linux 命令大全:bash 内建命令 help 用法详解与速查手册 本篇指南围绕 linux command 仓库中 help 命令文档 https://l
文档教程Linux kill 命令完全指南:信号机制、内建命令与 coreutils 外部命令实战详解
Linux kill 命令完全指南:信号机制、内建命令与 coreutils 外部命令实战详解 kill 是 Linux 中最常用的进程管理命令之一,其核心职责
文档教程DebugSwift WebSocket帧分析:iOS应用实时消息收发调试终极指南 🚀
DebugSwift WebSocket帧分析:iOS应用实时消息收发调试终极指南 🚀 DebugSwift 是一款强大的iOS应用调试工具包,专门为开发者提
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考