主题
cd 与 pwd 命令详解:搞清楚你"现在在哪、要去哪"
本文是 Linux 命令速查 中
cd与pwd的从 0 到 1 详解,本篇一次讲清这两个最基础的"位置类"命令。 目标:把help cd、help pwd里的每个选项讲清楚,多看几遍后,你在服务器上敲cd、pwd就知道该怎么用。 环境依据:cd、pwd都是 bash 内建命令(GNU bash 5.1.16 自带,用help cd、help pwd取语法);另有外部版/bin/pwd属 GNU coreutils 8.32。RHEL 系与 Debian 系用法一致。
一、命令是干什么的
在字符界面里操作 Linux,你随时要回答两个问题:
pwd(print working directory):我现在站在哪个目录?打印当前工作目录的绝对路径。cd(change directory):我要去哪个目录?切换当前工作目录。
它们就像 Windows 资源管理器窗口的"地址栏":pwd 是看地址栏现在写的什么,cd 是在地址栏输入一个新路径然后回车进去。只不过命令行没有"点击文件夹",一切靠敲路径。
类比:Windows 里你双击文件夹就是
cd;你看窗口顶上那行路径就是pwd。Linux 服务器没有图形界面,这两个命令就是你的"眼睛"和"腿"。
注意:cd、pwd 不是独立安装的小程序,而是 bash 自带的内建命令,用 type cd 能看到 cd is a shell builtin。
二、命令语法
bash
# pwd:打印当前目录
pwd [-LP]
# cd:切换目录
cd [-L|[-P [-e]]] [目录]pwd:几乎不带参数,-L/-P控制显示逻辑路径还是物理路径(见下);cd后面跟目标目录:写绝对路径(以/开头)或相对路径(相对当前目录);cd不带任何参数:直接回到"家目录"($HOME);- 特殊写法:
cd -回到上一次所在的目录。
最简单的用法:
bash
pwd # 看现在在哪
cd /etc # 去 /etc三、选项全表(对照 help cd / help pwd)
1. pwd 的选项
| 选项 | 中文含义 | 什么场景用 |
|---|---|---|
-L | 打印逻辑路径(默认),顺着你走过的软链接显示 | 日常用,跟你"感觉上"所在的目录一致 |
-P | 打印物理路径,把软链接全部解析成真实目录 | 排查软链接导致的路径迷惑时 |
不带选项时,
pwd行为等同-L。
2. cd 的选项
| 选项 | 中文含义 | 什么场景用 |
|---|---|---|
-L | 跟随软链接(默认),处理 .. 时按逻辑路径算 | 日常使用,从软链接目录 cd .. 回到你进来的地方 |
-P | 用物理目录结构,不跟随软链接,先解析再处理 .. | 想得到真实磁盘路径时(脚本里常用) |
-e | 配合 -P,若物理目录确定不出来就返回非零 | 脚本里严格校验时用 |
说明:
cd最常用的根本不是这些选项,而是它后面的目录参数。选项只在你用软链接、且对"真实路径 vs 逻辑路径"敏感时才需要。
四、由浅入深的典型示例
示例 1:看当前在哪
bash
pwdtext
/tmp/cmddemo示例 2:用绝对路径切换目录
bash
cd /etc
pwdtext
/etc以
/开头是绝对路径,从根目录算起,任何目录下都能直接用。
示例 3:回家、回上级、原地不动
bash
cd ~ # 回到家目录
pwd
cd .. # 上级目录
pwd
cd . # 留在当前目录(一般单独用没意义,多见于拼接路径)
pwdtext
/home/user
/home
/home
~代表家目录;..是上一级;.是当前目录。cd后面完全不写参数也等于cd ~。
示例 4:cd - 在两个目录间来回跳
bash
cd /etc
cd -
pwdtext
/etc
cd -会回到你上一次所在的目录,并把那个目录打印出来(这里被我们吞掉了)。在两个深目录之间反复横跳时非常好用。
示例 5:相对路径——一层层进
bash
cd /tmp/cmddemo
mkdir -p a/b/c
cd a/b/c
pwd
cd ..
pwd
cd ../..
pwdtext
/tmp/cmddemo/a/b/c
/tmp/cmddemo/a
/tmp/cmddemo相对路径是相对"你现在站的地方"。
cd ..一次退一级,cd ../..连退两级。
示例 6:软链接下,-L(默认)与 -P 的区别
先造一个软链接目录:link -> a,结构是 a/b。
bash
cd /tmp/pt/link/b
pwd # 默认 -L:逻辑路径
pwd -P # 物理路径,解析掉软链接text
/tmp/pt/link/b
/tmp/pt/a/bbash
# 默认(-L)模式下,从 link/b 退一级
cd /tmp/pt/link/b
cd ..
pwdtext
/tmp/pt/linkbash
# -P 物理模式下,从 link/b 退一级
cd /tmp/pt/link/b
cd -P ..
pwdtext
/tmp/pt/a看懂这个例子就理解了软链接:默认
-L把软链接当成"真目录",退..回到你"进来的地方";-P按磁盘真实位置退,回到软链接指向的那个真实目录的上级。
示例 7:内建 pwd 与外部 /bin/pwd 的差别
bash
cd /tmp/pt/link/b
pwd # 内建,逻辑路径
/bin/pwd # 外部程序,物理路径text
/tmp/pt/link/b
/tmp/pt/a/b在软链接目录里,内建
pwd默认给逻辑路径,而/bin/pwd这个外部程序给的是物理路径。日常敲pwd用的是内建版。
五、高频组合速记
实际工作中基本就这几个,背下来即可:
| 命令 | 用途 |
|---|---|
pwd | 看现在在哪 |
cd 目录 | 去某个目录 |
cd 或 cd ~ | 回家目录 |
cd - | 回上一个目录(来回切换神器) |
cd .. | 回上一级 |
cd ../.. | 连退两级 |
pwd -P | 看真实物理路径 |
六、RHEL 系与 Debian 系差异
cd、pwd 是 bash 内建命令,只要用的是 bash 就一样,RHEL/CentOS/Rocky 与 Ubuntu/Debian 用法完全一致。仅有的细微点:
- 系统默认 shell 可能不是 bash(例如某些精简版用
sh/dash),但服务器上登录后基本都是 bash; /bin/pwd外部版在两系都由 coreutils 提供,行为一致;~展开依赖$HOME,两系登录后都会正确设置。
七、新手易错点
cd之后没有输出不代表失败:cd成功是"静悄悄"的,切完就等你下一条命令;想确认位置就再pwd。- 目录名打错会报
No such file or directory:注意大小写(Linux 区分大小写,/ETC≠/etc),注意空格——路径里有空格要加引号或转义。 - 以为删不掉软链接里的东西:
cd进软链接目录后rm -rf .删的是真实目录里的内容,软链接本身还在;别在软链接目录里乱删。 cd失败时当前目录不会变:命令失败你还原地不动,不会被踢到奇怪的地方,放心试。- 脚本里慎用相对路径:脚本被不同人从不同目录调用时,相对路径会翻车;脚本开头最好先
cd "$(dirname "$0")"或用绝对路径。 cd是内建命令,脚本#!/bin/sh里也能用:它不靠外部 PATH,任何 shell 脚本里都能cd。