cd
是 Linux 和 Unix 系统中最基础且使用频率最高的命令之一,全称 Change Directory(切换目录)。它的功能是改变当前工作目录。以下是关于cd
的详细解析:
目录
5)cd - (切换到上一次所在的目录(类似“返回”功能))
7) cd ./subdir (切换到当前目录下的子目录(./ 可省略))
0.前言
Linux理论知识:路径的认识
- Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。
- 其中普通文件一定是目录树的叶子节点。
- 目录可能是叶子(空目录),也可能是路上节点。
- 理解路径存在的意义:树状组织方式,都是为了保证快速定位查找到指定的文件,而定位文件就需要具有唯一性的方案来进行定位文件。其中任何一个节点,都只有一个父节点,所以,从根目录开始,定位指定文件,路径具有唯一性。
- 绝对路径:一般从/开始,不依赖其他目录的定位文件的方式。
- 相对路径:相对于当前用户所处目录,定位文件的路径方式。
- 绝对路径一般不会随着用户的路径变化而丧失唯一性,一般在特定服务的配置文件中经常被使用。
- 相对路径因为它的便捷性,一般在命令行中使用较多。
1. 基本用法
功能:改变工作目录。将当前工作目录改变到指定的目录下。
语法:
cd [目录路径]
-
如果省略
目录路径
,默认切换到当前用户的家目录(HOME
环境变量指定的目录)。
常见操作示例
1)cd ../
(切换到上级目录(父目录))
2)cd 绝对路径 (切换到绝对路径指定的目录)
3)cd 相对路径 (使用相对路径改变当前工作目录)
4)cd ~ (切换到当前用户的家目录,~是家目录的简写)
注意:操作系统中的普通用户家目录默认为 /home/xxx,root用户家目录默认为 /root。
5)cd - (切换到上一次所在的目录(类似“返回”功能))
6)cd ../../ (
切换到上两级目录。)
7) cd ./subdir (
切换到当前目录下的子目录(./
可省略))
2. 特殊符号与路径处理
符号 | 说明 |
---|---|
. | 当前目录(通常可省略,如 cd ./dir 等价于 cd dir )。 |
.. | 上级目录(父目录)。 |
~ | 当前用户的家目录(如 ~ubuntu 表示用户 ubuntu 的家目录)。 |
- | 上一次的工作目录(通过 OLDPWD 环境变量记录)。 |
* | 通配符(需结合 Tab 补全使用,如 cd D* 进入第一个匹配的目录(匹配以 D 开头的目录))。 |
举个栗子:
目标:从 /home/hmz
快速进入 mydir
cd m* # 自动匹配第一个以 m 开头的目录(mydir)
-
如果
m*
只匹配到mydir
,会直接进入。 -
如果还有
music
、mmmdir
等目录,则会出现下面这种情况:若想要查找对应所需的目录,则需用
Tab
补全选择(重新跟着下面步骤来一遍)。
操作步骤:
-
输入
cd m
,然后按Tab
。 -
系统会显示所有以
m
开头的目录(如mydir/
,music/
)。 -
继续输入
y
变成cd my
,再按Tab
自动补全为cd mydir/
。 -
按回车进入。
3. 常见问题与技巧
Q1: 目录名有空格或特殊字符怎么办?
-
用引号包裹路径,或使用转义符
\
:cd "My Documents" # 正确 cd My\ Documents # 正确 cd My Documents # 错误(会被解析为两个参数)
Q2: 如何快速切换到家目录的子目录?
-
直接使用缩写~/[目录]:
4. 环境变量关联
-
$HOME
:用户家目录路径(cd
无参数时默认值)。 -
$OLDPWD
:记录上一次的目录(cd -
依赖此变量)。 -
$PWD
:当前目录路径(可通过echo $PWD
查看,类似pwd
命令)。
示例:
5. 脚本中的注意事项
-
脚本中建议使用绝对路径:避免因工作目录变化导致路径错误。
# 推荐写法 cd /opt/app || exit 1 # 如果切换失败则退出脚本
-
错误处理:检查目录是否存在:
if [ -d "/path/to/dir" ]; then # 检查 "/path/to/dir" 是否存在且是一个目录 cd "/path/to/dir" # 如果存在,则切换到该目录 else echo "目录不存在!" # 如果不存在,输出错误信息 fi
1. if [ -d "/path/to/dir" ]; then
-
[ -d "/path/to/dir" ]
-
[ ... ]
是 Bash 的条件测试语法(等同于test ...
)。 -
-d
是测试运算符,用于检查 路径是否存在且是一个目录。 -
"/path/to/dir"
是要检查的目标路径(需替换为实际路径)。
-
-
; then
-
表示如果条件成立(目录存在),则执行后续代码块。
-
2. cd "/path/to/dir"
-
如果条件成立(目录存在),则执行
cd
切换到该目录。 -
路径用双引号包裹,防止因空格或特殊字符导致错误。
3. else
-
如果条件不成立(目录不存在),则执行
else
部分的代码。
4. echo "目录不存在!"
-
输出错误提示信息,告知用户目录不存在。
5. fi
-
结束
if
条件语句块。
6. 扩展技巧
快速切换高频目录
-
使用
pushd
和popd
管理目录栈:pushd /tmp # 进入 /tmp 并记录目录 pushd /var/log # 进入 /var/log 并记录
popd # 返回上一个目录(/tmp) popd # 返回最初目录
结合 find
跳转到模糊匹配的目录(选学)
cd $(find / -type d -name "project*" 2>/dev/null | head -n 1)