cd 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于文件与目录命令族(见文件与目录命令族)。你每天用得最多的命令,大概率就是它。
cd(change directory,切换目录)改变当前 shell 的工作目录。它是 shell 内建,不是独立程序——所以 cd 只影响当前 shell,没法用 sudo cd(sudo 跑的是子进程,目录切换随子进程消亡)。
一、基本用法
bash
cd /var/log # 绝对路径切换
cd ../conf # 相对路径:上层再进 conf
cd # 不带参数 = 回家目录(等价于 cd ~)
cd ~ # 回家目录
cd .. # 上层目录
cd - # 切回上一次所在的目录(超好用)
cd -是救星:在 A、B 两个目录间反复横跳时,不用记完整路径,一个cd -来回切。cd不带参数直接回~(HOME)。注意相对路径基于"当前目录",不是脚本所在目录(脚本里想基于自身目录要用cd "$(dirname "$0")",见pwd)。
二、常见失败原因
bash
cd /no/such/dir
# bash: cd: /no/such/dir: No such file or directory
cd file.txt
# bash: cd: file.txt: Not a directory
cd失败只有两类:目录不存在、或目标不是目录(你拿文件当目录切)。报错信息已经说得很清楚,看一眼即可。
三、与子 shell 的坑
bash
(cd /tmp && ls) # 子 shell 里切到 /tmp,括号外不受影响
./script.sh # 脚本里 cd 只影响脚本自己,父 shell 目录不变圆括号
( )开的是子 shell,cd只在里面生效,出来还是原目录——常用来"临时进某目录干件事不影响当前位置"。脚本里的cd同理不影响调用它的终端。
四、实战:快速回家与回跳
bash
cd ~/project/src # ~ 展开成 HOME,再进子目录
cd - # 一键回上一个目录
~在路径里任何位置都会展开(如~/project、cp a.txt ~/bak/),比写全/home/user稳,跨用户脚本也通用。
一句话总结
cd = 切换工作目录(shell 内建):绝对/相对路径都行;cd ~ 回家、cd .. 上层、cd - 回上一个目录(来回横跳神器);cd 只影响当前 shell,子 shell/脚本里的切换不回传;失败只有两种:目录不存在、或目标不是目录。