一、基础选项
**-P / --physical**
强制切换到符号链接指向的实际目录(物理路径),而非链接自身。
示例:
bash
cd -P /usr/local/mysql # 跳过符号链接,直接进入实际目录
适用场景:解决符号链接导致的路径混淆问题。
**-L / --logical**
默认行为,切换到符号链接的目标路径(逻辑路径)。
示例:
bash
cd -L /var/log/apache2 # 跟随符号链接,进入 /var/log
目录
注意:若目标为符号链接且未指定 -P,cd 默认使用此模式。
**-**
返回上一次访问的目录,实现目录间的快速切换。
示例:
bash
cd /var/log # 进入 /var/log
cd /etc # 进入 /etc
cd - # 返回 /var/log
特性:每次切换目录后,历史记录会动态更新。
二、特殊符号
**~**
切换到当前用户的家目录。
示例:
bash
cd ~ # 等同于 cd $HOME
cd ~root # 切换到 root 用户的家目录(需权限)
扩展用法:~用户名 可切换到指定用户的家目录。
**.**
表示当前目录,切换后路径不变。
示例:
bash
cd . # 仍在当前目录
用途:常用于脚本中避免路径变化。
**…**
切换到当前目录的上一级目录。
示例:
bash
cd … # 返回上级目录
cd …/… # 返回上两级目录
组合使用:cd …/…/path 可快速跳转多层目录。
三、进阶用法
结合环境变量
使用 $变量名 快速切换常用目录。
示例:
bash
cd $MY_PROJECT_DIR # 假设 MY_PROJECT_DIR
已定义为 /home/user/projects
优势:简化路径输入,适合频繁访问的目录。
通配符匹配
通过通配符快速定位目录。
示例:
bash
cd test* # 进入以 test
开头的目录(如 test_dir
)
注意:需确保匹配结果唯一,避免歧义。
目录栈操作(pushd/popd)
pushd 目录:将当前目录压入栈并切换到目标目录。
popd:弹出栈顶目录并切换到该目录。
示例:
bash
pushd /etc # 压入 /home
,切换到 /etc
pushd /var/log # 压入 /etc
,切换到 /var/log
popd # 弹出 /var/log
,切换到 /etc
popd # 弹出 /etc
,切换到 /home
适用场景:多目录间频繁切换。
四、常见问题与解决
目录不存在
错误:cd: /nonexistent: No such file or directory
解决:检查路径拼写或使用 ls 确认目录存在。
权限不足
错误:cd: Permission denied
解决:
使用 sudo -i 切换到 root 用户
修改目录权限(需管理员权限)。
误切换到文件
错误:cd: /path/to/file: Not a directory
解决:确认目标是否为目录,或使用 ls -l 检查类型。
五、快捷键与技巧
Tab 自动补全:输入部分路径后按 Tab,系统自动补全目录名。
Ctrl+L 清屏:切换目录后快速清理终端界面。
历史记录:通过 cd - 实现类似浏览器的前进/后退功能。
总结
cd 命令的核心功能是目录切换,其灵活性体现在符号链接处理、历史记录管理和栈操作等方面。掌握 -P/-L 选项可解决复杂路径问题,而 pushd/popd 则适合多目录协作场景。更多细节可通过 man cd 或 cd --help 查看。