1. 首页 > Linux教程 > 正文

Linux教程FG048-cd命令与目录切换(绝对/相对路径/特殊目录)

本文档风哥主要介绍Linux cd命令的使用方法,包括绝对路径、相对路径、特殊目录符号等,参考Red Hat Enterprise Linux 10官方文档,适合运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn 更多学习教程公众号风哥教程itpux_com

参考Red Hat Enterprise Linux 10官方文档中的System administration章节 from LinuxDBA视频:www.itpux.com

Part01-基础概念与理论知识

1.1 cd命令基本概念

cd(change directory)命令用于切换当前工作目录,是Linux系统中最常用的命令之一。 学习交流加群风哥QQ113257174

cd命令核心功能:

  • 切换目录:改变当前工作目录
  • 绝对路径:从根目录开始的完整路径
  • 相对路径:相对于当前目录的路径
  • 特殊符号:使用特殊符号快速切换

1.2 路径类型详解

# 路径类型说明

1. 绝对路径
– 从根目录(/)开始的完整路径
– 例如:/home/user/Documents
– 特点:始终有效,不受当前目录影响

2. 相对路径
– 相对于当前工作目录的路径
– 例如:Documents、../Downloads、./Pictures
– 特点:依赖于当前目录,更简洁

3. 路径示例
当前目录:/home/user

绝对路径访问:
cd /var/log # 切换到/var/log

相对路径访问:
cd Documents # 切换到/home/user/Documents
cd ../Downloads # 切换到/home/Downloads
cd ./Pictures # 切换到/home/user/Pictures

4. 路径分隔符
/ – 根目录或路径分隔符
./ – 当前目录
../ – 上级目录

1.3 特殊目录符号

Linux系统中的特殊目录符号: 学习交流加群风哥微信: itpux-com

  • ~:用户家目录
  • -:上一个工作目录
  • .:当前目录
  • ..:上级目录
  • /:根目录
风哥提示:熟练使用cd命令和路径切换技巧,可以大幅提升在Linux系统中的工作效率。建议记住常用的特殊目录符号。

Part02-生产环境规划与建议

2.1 cd命令使用技巧

# cd命令使用技巧

1. 快速切换到家目录
cd # 不带参数
cd ~ # 使用~符号
cd $HOME # 使用环境变量

2. 快速返回上一目录
cd – # 返回上一个工作目录

3. 使用Tab补全
cd /ho # 自动补全为/home
cd Doc # 自动补全为Documents

4. 使用通配符
cd /var/l* # 切换到/var下以l开头的目录
cd /usr/local/* # 切换到/usr/local下的第一个目录

5. 使用变量
cd $HOME/Documents # 切换到家目录下的Documents
cd $OLDPWD # 切换到上一个工作目录

6. 使用命令替换
cd $(dirname /etc/hosts) # 切换到/etc
cd `find /home -type d -name “Documents”` # 查找并切换

2.2 常用别名配置

# cd常用别名配置

# 编辑 ~/.bashrc
# cat >> ~/.bashrc << 'EOF' # cd命令别名 alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..' alias ~='cd ~' alias --='cd -' alias home='cd ~' alias back='cd -' alias root='cd /' alias logs='cd /var/log' alias etc='cd /etc' alias tmp='cd /tmp' EOF # source ~/.bashrc # 使用别名示例 # .. /home # ... / # logs /var/log # etc /etc

2.3 最佳实践建议

使用cd命令的最佳实践:

  • 使用Tab补全:避免输入错误,提高效率
  • 使用别名:为常用目录设置别名
  • 使用目录栈:利用pushd和popd管理目录
  • 使用CDPATH:设置目录搜索路径
  • 避免过深目录:合理组织目录结构

Part03-生产环境项目实施方案

3.1 cd基础用法

# cd基础用法示例

# 1. 切换到家目录
# cd
# pwd
/home/user

# cd ~
# pwd
/home/user

# cd $HOME
# pwd
/home/user

# 2. 切换到根目录
# cd /
# pwd
/

# 3. 切换到指定目录(绝对路径)
# cd /var/log
# pwd
/var/log

# 4. 切换到指定目录(相对路径)
# 当前在/home/user
# cd Documents
# pwd
/home/user/Documents

# 5. 切换到上级目录
# cd ..
# pwd
/home/user

# 6. 切换到上两级目录
# cd ../..
# pwd
/home

# 7. 返回上一个工作目录
# cd /var/log
# cd /etc
# cd –
/var/log
# pwd
/var/log

# 8. 切换到用户家目录下的子目录
# cd ~/Documents
# pwd
/home/user/Documents

# 9. 切换到其他用户的家目录
# cd ~root
# pwd
/root

# 10. 切换到当前目录(无效果,但可用于测试)
# cd .
# pwd
/home/user

3.2 cd高级用法

# cd高级用法

# 1. 使用CDPATH环境变量
# export CDPATH=/etc:/var/log:/usr/local
# cd httpd
/etc/httpd
# pwd
/etc/httpd

# cd messages
/var/log/messages
-bash: cd: /var/log/messages: Not a directory

# cd nginx
/usr/local/nginx
# pwd
/usr/local/nginx

# 2. 使用shopt -s cdable_vars
# shopt -s cdable_vars
# export mydir=/var/log
# cd mydir
/var/log
# pwd
/var/log

# 3. 使用目录栈(pushd/popd/dirs)
# 当前目录:/home/user

# 将目录压入栈并切换
# pushd /var/log
/var/log ~
# pwd
/var/log

# 继续压入
# pushd /etc
/etc /var/log ~
# pwd
/etc

# 查看目录栈
# dirs
/etc /var/log ~

# 切换到栈中的目录
# pushd +1
/var/log /etc ~
# pwd
/var/log

# 弹出栈顶目录
# popd
/etc ~
# pwd
/etc

# 4. 使用cd命令的错误处理
# cd /nonexistent 2>/dev/null || echo “目录不存在”
目录不存在

# 5. 在脚本中使用cd
# cat > /tmp/test_cd.sh << 'EOF' #!/bin/bash cd /var/log || { # from:www.itpux.com.qq113257174.wx:itpux-com echo "无法切换到/var/log" exit 1 } echo "当前目录: $(pwd)" ls -lh messages EOF # chmod +x /tmp/test_cd.sh # /tmp/test_cd.sh 当前目录: /var/log -rw-------. 1 root root 50M Apr 2 10:00 messages # 6. 使用find和cd组合 # cd $(find /home -type d -name "Documents" | head -1) # pwd /home/user/Documents # 7. 使用grep和cd组合 # cd $(ls -d /usr/local/* | grep nginx) # pwd /usr/local/nginx

3.3 实用案例

# cd实用案例

# 案例1:快速切换到日志目录并查看最新日志
# cd /var/log && ls -lht | head -10
total 102M
-rw——-. 1 root root 50M Apr 2 16:00 messages
-rw——-. 1 root root 30M Apr 2 15:30 secure
-rw-r–r–. 1 root root 20M Apr 2 15:00 cron

# 案例2:切换到配置文件目录并备份
# cd /etc/httpd/conf && cp httpd.conf httpd.conf.bak
# ls -lh httpd.conf*
-rw-r–r–. 1 root root 12K Apr 2 10:00 httpd.conf
-rw-r–r–. 1 root root 12K Apr 2 16:00 httpd.conf.bak

# 案例3:切换到项目目录并执行操作
# cd /opt/project && git pull && systemctl restart app
Already up to date.
Redirecting to /bin/systemctl restart app.service

# 案例4:批量切换目录执行命令
# for dir in /home/*/; do cd “$dir” && pwd && ls -lh; done
/home/user1/
total 8.0K
drwxr-xr-x. 2 user1 user1 4.0K Apr 2 10:00 Documents
drwxr-xr-x. 2 user1 user1 4.0K Apr 2 10:00 Downloads

/home/user2/
total 8.0K
drwxr-xr-x. 2 user2 user2 4.0K Apr 2 10:00 Documents

# 案例5:创建并切换到新目录
# mkdir -p /tmp/test_dir && cd /tmp/test_dir
# pwd
/tmp/test_dir

# 案例6:切换到脚本所在目录
# cd $(dirname $0)
# 或
# cd “$(dirname “$(readlink -f “$0″)”)”

# 案例7:切换到符号链接指向的实际目录
# cd -P /var/mail
# pwd
/var/spool/mail

# 案例8:切换到物理目录(解析符号链接)
# cd -L /var/mail
# pwd
/var/mail

Part04-生产案例与实战讲解

4.1 案例1:快速目录切换

# 快速目录切换实战

# 场景:运维工程师需要在多个目录间频繁切换

# 1. 配置CDPATH
# cat >> ~/.bashrc << 'EOF' # 设置CDPATH,快速访问常用目录 export CDPATH=.:/etc:/var/log:/var/www:/opt:/usr/local EOF # source ~/.bashrc # 现在可以直接切换到CDPATH中的子目录 # cd httpd /etc/httpd # pwd /etc/httpd # cd nginx /etc/nginx # pwd /etc/nginx # cd html /var/www/html # pwd /var/www/html # 2. 配置常用目录别名 # cat >> ~/.bashrc << 'EOF' # 常用目录别名 alias log='cd /var/log' alias conf='cd /etc' alias www='cd /var/www/html' alias app='cd /opt/application' alias scripts='cd /usr/local/scripts' alias backup='cd /backup' alias data='cd /data' EOF # source ~/.bashrc # 使用别名快速切换 # log /var/log # pwd /var/log # conf /etc # pwd /etc # www /var/www/html # pwd /var/www/html # 3. 使用函数实现智能切换 # cat >> ~/.bashrc << 'EOF' # 智能cd函数 function cdd() { if [ -z "$1" ]; then cd elif [ -d "$1" ]; then cd "$1" elif [ -f "$1" ]; then cd "$(dirname "$1")" else echo "目录或文件不存在: $1" return 1 fi } # 项目目录快速切换 function proj() { local project_dir="/opt/projects/$1" if [ -d "$project_dir" ]; then cd "$project_dir" else echo "项目目录不存在: $project_dir" return 1 fi } # 日志目录快速切换 function logs() { local app="$1" if [ -z "$app" ]; then cd /var/log else cd "/var/log/$app" fi } EOF # source ~/.bashrc # 使用智能切换函数 # cdd /etc/hosts /etc # pwd /etc # proj webapp /opt/projects/webapp # pwd /opt/projects/webapp # logs nginx /var/log/nginx # pwd /var/log/nginx

4.2 案例2:目录栈管理

# 目录栈管理实战

# 场景:需要在多个目录间来回切换

# 1. 使用pushd/popd管理目录栈
# 当前目录:/home/user

# 压入目录并切换
# pushd /var/log
/var/log ~
# pwd
/var/log

# 继续压入
# pushd /etc
/etc /var/log ~
# pwd
/etc

# 继续压入
# pushd /usr/local
/usr/local /etc /var/log ~
# pwd
/usr/local

# 查看目录栈
# dirs -v
0 /usr/local
1 /etc
2 /var/log
3 ~

# 切换到栈中的第N个目录
# pushd +2
/var/log /usr/local /etc ~
# pwd
/var/log

# 弹出栈顶目录
# popd
/usr/local /etc ~
# pwd
/usr/local

# 弹出指定位置的目录
# popd +1
/usr/local ~
# pwd
/usr/local

# 2. 清空目录栈
# dirs -c
# dirs
/usr/local

# 3. 目录栈别名配置
# cat >> ~/.bashrc << 'EOF' # 目录栈别名 alias d='dirs -v' alias p='pushd' alias o='popd' alias pu='pushd' alias po='popd' EOF # source ~/.bashrc # 使用别名 # pushd /var/log /var/log /usr/local # pushd /etc /etc /var/log /usr/local # d 0 /etc 1 /var/log 2 /usr/local # pushd +1 /var/log /etc /usr/local # pwd /var/log

4.3 案例3:自动补全技巧

# cd自动补全技巧

# 1. 使用Tab键补全
# cd /ho
# 自动补全为:cd /home/

# cd Doc
# 自动补全为:cd Documents/

# 2. 双击Tab显示所有选项
# cd /var/l
lib/ local/ lock/ log/

# 3. 配置bash-completion
# dnf install -y bash-completion

# 4. 使用通配符补全
# cd /var/log/mess*
# 切换到/var/log/messages(如果messages是目录)

# 5. 使用大括号扩展
# cd /var/{log,tmp}
# 切换到/var/log,然后/var/tmp

# 6. 使用变量补全
# export PROJECT=/opt/projects/webapp
# cd $PROJECT
# 自动补全为:cd /opt/projects/webapp

# 7. 配置CDPATH后的自动补全
# export CDPATH=/etc:/var/log
# cd ht
# 自动补全为:cd httpd/(来自/etc/httpd)

# 8. 使用fzf进行模糊搜索切换
# 安装fzf
# dnf install -y fzf

# 配置fzf集成
# source /usr/share/fzf/shell/key-bindings.bash

# 使用Alt+C进行模糊目录切换
# 按Alt+C,然后输入目录名的部分字符进行模糊搜索

# 9. 自定义补全函数
# cat >> ~/.bashrc << 'EOF' # 自定义cd补全 _cd_complete() { local cur words cur="${COMP_WORDS[COMP_CWORD]}" words=$(find ${CDPATH//:/ } -maxdepth 1 -type d 2>/dev/null | sed ‘s|.*/||’)
COMPREPLY=($(compgen -W “${words}” — “${cur}”))
}
complete -F _cd_complete cd
EOF

# source ~/.bashrc

Part05-风哥经验总结与分享

5.1 cd命令总结

cd命令核心要点:

  • 基础用法:cd [目录路径]
  • 特殊符号:~(家目录)、-(上一目录)、..(上级目录)
  • 路径类型:绝对路径(从/开始)、相对路径(从当前目录开始)
  • 高级功能:CDPATH、目录栈(pushd/popd)、自动补全
  • 效率提升:别名、函数、Tab补全

5.2 常见问题解决

# cd常见问题解决

# 问题1: 目录不存在
# cd /nonexistent
-bash: cd: /nonexistent: No such or directory

# 解决方法:
# 1. 检查目录是否存在
ls -ld /nonexistent

# 2. 使用错误处理
cd /nonexistent 2>/dev/null || echo “目录不存在”

# 问题2: 权限不足
# cd /root
-bash: cd: /root: Permission denied

# 解决方法:
# 使用sudo切换到root用户
sudo -i

# 问题3: 目录名包含空格
# cd My Documents
-bash: cd: too many arguments

# 解决方法:
# 使用引号或转义
cd “My Documents”
cd My\ Documents

# 问题4: 符号链接问题
# cd -P /var/mail
# 切换到物理路径

# cd -L /var/mail
# 切换到逻辑路径

# 问题5: 在脚本中cd失败
# 解决方法:使用错误处理
cd /target/directory || {
echo “无法切换目录”
exit 1
}

# 问题6: CDPATH导致意外切换
# 解决方法:使用绝对路径或清除CDPATH
unset CDPATH
cd ./Documents # 明确指定当前目录

5.3 实用工具推荐

# cd相关实用工具

# 1. z – 智能目录跳转
# 安装
# git clone https://github.com/rupa/z.git ~/.z

# 配置
# echo ‘. ~/.z/z.sh’ >> ~/.bashrc
# source ~/.bashrc

# 使用
# cd /var/log
# cd /etc/httpd
# cd /usr/local/nginx

# z log # 跳转到/var/log
# z http # 跳转到/etc/httpd
# z nginx # 跳转到/usr/local/nginx

# 2. autojump – 更智能的目录跳转
# 安装
# dnf install -y autojump

# 配置
# echo ‘. /usr/share/autojump/autojump.bash’ >> ~/.bashrc
# source ~/.bashrc

# 使用
# j log # 跳转到/var/log
# j http # 跳转到/etc/httpd

# 3. bd – 快速返回上级目录
# 安装
# wget -O /fgedu/shell/bd https://raw.githubusercontent.com/vigneshwaranr/bd/master/bd
# chmod +x /fgedu/shell/bd

# 使用
# 当前在:/home/user/projects/webapp/src/components
# bd web # 返回到/home/user/projects/webapp
# bd pro # 返回到/home/user/projects

# 4. fzf – 模糊搜索工具
# 安装
# dnf install -y fzf

# 配置
# source /usr/share/fzf/shell/key-bindings.bash

# 使用
# Alt+C – 模糊搜索目录并切换
# Ctrl+T – 模糊搜索文件

# 5. broot – 交互式目录导航
# 安装
# dnf install -y broot

# 使用
# br # 启动broot,选择目录后自动切换

风哥总结:cd命令虽然简单,但掌握其高级用法和技巧可以大幅提升工作效率。建议配置常用目录别名,使用目录栈管理多个工作目录,并尝试使用z或autojump等智能跳转工具。在生产环境中,要注意路径的正确性和权限问题。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息