本文档风哥主要介绍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
- 切换目录:改变当前工作目录
- 绝对路径:从根目录开始的完整路径
- 相对路径:相对于当前目录的路径
- 特殊符号:使用特殊符号快速切换
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
- ~:用户家目录
- -:上一个工作目录
- .:当前目录
- ..:上级目录
- /:根目录
Part02-生产环境规划与建议
2.1 cd命令使用技巧
1. 快速切换到家目录
cd # 不带参数
cd ~ # 使用~符号
cd $HOME # 使用环境变量
2. 快速返回上一目录
cd – # 返回上一个工作目录
3. 使用Tab补全
cd /ho
cd Doc
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 常用别名配置
# 编辑 ~/.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基础用法
# 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高级用法
# 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 实用案例
# 案例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:自动补全技巧
# 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 [目录路径]
- 特殊符号:~(家目录)、-(上一目录)、..(上级目录)
- 路径类型:绝对路径(从/开始)、相对路径(从当前目录开始)
- 高级功能:CDPATH、目录栈(pushd/popd)、自动补全
- 效率提升:别名、函数、Tab补全
5.2 常见问题解决
# 问题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 实用工具推荐
# 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,选择目录后自动切换
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
