当前位置: 首页 > news >正文

Linux命令-pwd(打印当前工作目录)

Linux命令-pwd(打印当前工作目录)

    • 快速参考
    • 命令语法
    • 常用选项
    • 核心概念:逻辑路径 vs 物理路径
    • 实战示例
      • 1. 基础使用
      • 2. 逻辑路径(-L)示例
      • 3. Shell 内置 vs 外部命令
      • 4. 脚本中的实用模式
      • 5. 在提示符中使用 pwd
      • 6. 高级:符号链接迷宫排查
      • 7. $PWD 环境变量
    • 发行版差异
    • pwd vs realpath vs readlink -f
    • 总结

快速参考

pwd(Print Working Directory)是 Linux 中最简单也最常用的命令之一——它告诉你"我现在在哪"。尽管功能看似琐碎,但pwd在符号链接密集的环境中有着微妙的差异:pwd默认(-L)显示逻辑路径,而pwd -P显示物理真实路径。

在 Linux 文件系统的迷雾中,pwd就是你的指南针。它只有两个选项,但理解它们的区别能帮你避免在符号链接迷宫中迷失方向。

命令语法

pwd [选项]

常用选项

选项功能
-L显示逻辑路径(默认,包含符号链接)
-P显示物理路径(解析所有符号链接)
--help显示帮助
--version显示版本

核心概念:逻辑路径 vs 物理路径

物理文件系统布局: / ├── var/ │ └── run/ │ └── myservice/ │ └── data/ ├── tmp/ │ └── runtime → /var/run/myservice/ # 符号链接 当你执行: $ cd /tmp/runtime/data/ $ pwd (/tmp/runtime/data/ 逻辑路径,你看到的路径) $ pwd -P (/var/run/myservice/data/ 物理路径,文件系统真实位置)

实战示例

1. 基础使用

# 最基本用法$pwd/home/alice# 在脚本中获取当前目录$CURRENT_DIR=$(pwd)$echo"Working in:$CURRENT_DIR"Working in: /home/alice/projects/myapp# 使用反引号(旧语法)$OLDDIR=`pwd`$echo$OLDDIR# 保存当前目录并恢复(脚本常用)$SAVED_DIR=$(pwd)$cd/tmp $# ... do something in /tmp ...$cd"$SAVED_DIR"# 回到原目录

2. 逻辑路径(-L)示例

# -L 是默认行为:为你显示你"如何来到"这个目录的$mkdir-p/var/data/storage $ln-s/var/data/storage /tmp/mystorage $cd/tmp/mystorage $pwd-L/tmp/mystorage# 你使用的符号链接路径$pwd-P/var/data/storage# 文件系统上的真实路径# 另一个例子$cd/usr/lib $pwd/usr/lib $ls-ld/usr/lib lrwxrwxrwx1root root7Jan12023/usr/lib ->usr/lib# /usr/lib 实际上是符号链接!$pwd-P/usr/usr/lib# 等等,这不对...# 实际上在现代系统中 /usr/lib 指向的是 usr/lib (相对路径)# 更常见的例子:$ls-ld/lib lrwxrwxrwx1root root7Jan12023/lib ->usr/lib $cd/lib $pwd-L/lib $pwd-P/usr/lib

3. Shell 内置 vs 外部命令

# pwd 既是 Shell 内置命令,也是外部可执行程序# Shell 内置版本(bash 使用)$typepwdpwdis a shellbuiltin# 外部程序版本$whichpwd/usr/bin/pwd $ /usr/bin/pwd /home/alice# 主要区别:Shell 内置的 pwd 记住了你的"逻辑"路径# 外部 /usr/bin/pwd 行为取决于选项# 使用外部程序的 pwd$ /usr/bin/pwd-P# 强制使用外部命令而非内置$commandpwd-P$envpwd-P

4. 脚本中的实用模式

# 获取脚本所在目录的绝对路径(重要!)SCRIPT_DIR="$(cd "$(dirname"${BASH_SOURCE[0]}")"&&pwd-P)" echo "Script directory:$SCRIPT_DIR" # 无论脚本被从哪里调用,都能正确获取真实目录 # 更健壮的版本 get_script_dir() { local source="${BASH_SOURCE[0]}" while [ -h "$source" ]; do local dir="$(cd-P"$(dirname"$source")"&&pwd)" source="$(readlink"$source")" [[$source!= /* ]] && source="$dir/$source" done cd -P "$(dirname"$source")" && pwd } SCRIPT_DIR=$(get_script_dir)# 创建临时目录并切换 work_in_temp() { local savedir=$(pwd)local tmpdir=$(mktemp-d)cd "$tmpdir" echo "Workingin$tmpdir" # ... do work ... cd "$savedir" rm -rf "$tmpdir" } # 相对路径转绝对路径 resolve_path() { local path="$1" if [ -d "$path" ]; then (cd "$path" && pwd -P) else (cd "$(dirname"$path")" && echo "$(pwd-P)/$(basename"$path")") fi } # 检查是否在某个目录下 is_under_path() { local check_dir="$1" [[ "$(pwd-P)" == "$(cd"$check_dir"&&pwd-P)"* ]] } if is_under_path "/home"; then echo "Working inside /home"fi

5. 在提示符中使用 pwd

# PS1 中显示当前目录$PS1='[\u@\h \W]\$ '# \W 显示当前目录名[alice@server projects]$# 只显示目录名$PS1='[\u@\h \w]\$ '# \w 显示完整路径[alice@server ~/projects/myapp]$# 自定义提示符中显示物理路径$PS1='[\u@\h $(pwd -P)]\$ '# 截断长路径short_pwd(){localdir=$(pwd-P)localhome=${HOME%/}dir=${dir/#$home/\~}echo"$dir"}$PS1='[\u@\h $(short_pwd)]\$ '

6. 高级:符号链接迷宫排查

# 场景:你 cd 到了一个目录,但感觉路径不对# 第一步:查看逻辑路径$pwd/opt/myapp/config# 第二步:查看物理路径$pwd-P/usr/local/myapp-v2.3/config# 第三步:追踪符号链接链$ namei-l/opt/myapp f: /opt/myapp drwxr-xr-x root root / drwxr-xr-x root root opt lrwxrwxrwx root root myapp ->/usr/local/myapp-v2.3# 第四步:查看所有父目录是否有符号链接$ readlink-f.# 同样给出物理路径/usr/local/myapp-v2.3/config# 第五步:如果觉得迷惑,使用 realpath$ realpath./usr/local/myapp-v2.3/config# 对比:逻辑 vs 物理$echo"Logical:$(pwd-L)"Logical: /opt/myapp/config $echo"Physical:$(pwd-P)"Physical: /usr/local/myapp-v2.3/config

7. $PWD 环境变量

# Shell 维护一个 $PWD 环境变量$echo$PWD/home/alice# cd 后自动更新$cd/tmp $echo$PWD/tmp# $PWD 通常等于 pwd -L(逻辑路径)$cd/tmp/mystorage# (符号链接目录)$echo$PWD/tmp/mystorage $pwd-L/tmp/mystorage $pwd-P/var/data/storage# 注意:$PWD 和 pwd -P 可能不同!

发行版差异

pwd在所有 Linux 发行版和 Unix 系统中行为完全一致(POSIX 标准)。

系统Shell 内置外部命令
所有 Linuxbash/zsh/dash 都内置/usr/bin/pwd(coreutils)
macOSbash/zsh 内置/bin/pwd(BSD)
FreeBSDsh/bash/zsh 内置/bin/pwd
BusyBoxash 内置/bin/pwd

pwd vs realpath vs readlink -f

命令输出用途
pwd -P物理路径获取真实文件系统路径
realpath .物理路径(解析所有符号链接)同 pwd -P
readlink -f .物理绝对路径同 realpath
pwd -L逻辑路径保留符号链接的路径
# 三者等价$pwd-P/var/data/storage $ realpath./var/data/storage $ readlink-f./var/data/storage

总结

pwd简单但不"简陋":

  • 获取当前目录最基本的方式
  • -Pvs-L的区别是理解文件系统符号链接的关键
  • 在脚本中用$(cd "$(dirname "$0")" && pwd -P)获取脚本的真实物理路径
  • Shell 内置的pwd和外部程序的/usr/bin/pwd通常行为一致

在符号链接密集的环境中(如/lib/usr/lib、容器挂载点),pwd -P是你区分"你以为在哪"和"你实际在哪"的唯一方式。

http://www.cnnetsun.cn/news/3033758.html

相关文章:

  • 三分钟带你认识有机溶质转运蛋白(OST)家族
  • AI引发存储危机,苹果Mac、iPad涨价,iPhone 18会跟进吗?
  • 服务周到的牙科诊所如何挑选
  • RocketMQ 从0到1
  • 89.7%恶意IP活不过1个月:金融风控如何用日更离线库应对住宅中继攻击?
  • 市级工程实验室申报条件:
  • 早高峰整层职场集体断网:逐包溯源揪出私接路由器引发的广播风暴祸根
  • 宏观-中观-微观关联模型构建与数据融合方案
  • Grok 4.3大模型应该怎么用?2026 实操步骤、应用场景与注意事项
  • 基因组编辑技术如何实现从“精雕细琢“到“大刀阔斧“的跨越?
  • AI 写代码为什么会错?上下文、测试和反馈循环
  • 微软Intelligent Terminal中登录GitHub Copilot
  • Ubuntu24.04.4安装堡垒机JummpServer
  • 国内最好用协会私域管理系统软件口碑排行榜单:从选型困惑到高效落地的实践路径
  • 电脑自主操作 AI 助手 OpenClaw,全可视化落地实操文档(包含安装包)
  • 【AI产品经理】 第四章 安全合规与边界设计
  • 吴恩达《深度学习》之看懂集束搜索
  • VS Code 文件调用路径问题
  • 九九云环境智能精准喷氨系统,把脱硝成本压缩到最优区间
  • bond网络问题(印象笔记归档)
  • 【深度评测】AU-60 AI语音模组:智能机器人拾音对讲的终极解决方案
  • 5分钟快速上手:如何使用Ray Adapter将Ray应用迁移到华为昇腾硬件
  • 联想拯救者笔记本性能优化终极指南:Lenovo Legion Toolkit完全掌控
  • OpenClaw 小龙虾 Windows 部署完整教程,10 分钟搭建专属桌面 AI 数字员工(含安装包)
  • Spring-adapter注解详解:@FunctionService和@FunctionHandler使用指南
  • 【awinic inside】腕间长航 精准随行 | 艾为芯助力小米 Watch S5 长效续航精准定位
  • UMDK URMA组件详解:如何实现单边、双边和原子内存操作的终极指南
  • 中国大模型跻身全球AI第一梯队,开源改写中西方竞争规则!
  • 为什么照片骗不了Windows Hello?红外人脸识别的硬核安全密码
  • spring-adapter错误处理与调试:常见问题排查指南