新闻详情

新闻详情

首页 / 资讯中心 / 详情

Linux cd 命令详解:cd、cd ~、cd /、cd .. 与 cd /home 的区别与避坑指南

发布时间:2026/9/26 18:30:11来源:尧图网络
Linux cd 命令详解:cd、cd ~、cd /、cd .. 与 cd /home 的区别与避坑指南
1. 别小看这个两字母命令cd 到底在干什么刚接触 Linux 那会儿我觉得cd这命令简单到不值一提——不就是切换目录嘛能有什么花样结果第一次上生产服务器排查问题cd /home和cd ~傻傻分不清切错了目录差点在错误的路径下执行了删除操作。从那以后我才明白越是基础的东西越容易在关键时刻坑人。cd是change directory的缩写属于 shell 的内置命令builtin不是独立的二进制程序。这一点很关键你用type cd查一下会发现它显示的是cd is a shell builtin而不是某个/bin/cd的路径。正因为它是内置的所以它的行为会受当前 shell 环境影响比如CDPATH变量、符号链接的处理方式、以及cd命令本身的别名设置都会让同一个命令在不同环境下表现不一样。这篇文章我打算把cd、cd ~、cd /、cd ..、cd /home这几个最常见也最容易混淆的用法彻底讲透。不管你是刚装好 Linux 虚拟机的新手还是天天泡在服务器上的运维看完之后至少能保证一件事再也不会因为切错目录而手抖。我会从底层原理讲到实操细节再把我这些年踩过的坑和排查技巧一并倒出来你可以直接拿去对照自己的环境验证。2. 五种 cd 写法逐个拆解从原理到实际行为2.1 cd 不带参数回到用户主目录的默认行为很多人以为cd不带参数是什么都不做其实恰恰相反它会把你送到当前用户的主目录home directory。这个行为等价于cd ~也等价于cd $HOME。为什么会有这个设计因为主目录是用户登录后的默认落脚点日常操作里回家是高频动作所以 shell 干脆让cd空参就完成这件事。你可以这样验证# 先随便切到一个目录 cd /tmp pwd # 输出/tmp # 然后不带参数执行 cd cd pwd # 输出/home/你的用户名这里有个细节值得注意cd空参依赖的是HOME环境变量。如果你用sudo或者在某些特殊上下文里执行HOME可能被改成了/root或者干脆为空。我遇到过一种情况在脚本里用sudo -u someuser切换用户后执行cd结果因为HOME没跟着切换直接回到了 root 的家目录后续的文件操作全跑偏了。所以在脚本里永远不要依赖裸cd要写就写cd $HOME或者明确的绝对路径。提示用echo $HOME确认当前 shell 认为你的家在哪尤其是在切换用户、使用 sudo、或者通过某些自动化工具执行命令时这一步能帮你避开大量路径错误。2.2 cd ~波浪号背后的展开机制~这个符号在 shell 里叫tilde expansion波浪号展开它由 shell 在命令执行前就替换掉了cd命令本身根本看不到~。也就是说你敲cd ~shell 先把它变成cd /home/你的用户名然后才交给cd执行。这个展开规则有几个变体很多人只知道第一个写法展开结果说明~$HOME当前用户主目录~username指定用户的主目录比如~root展开为/root~/docs$HOME/docs家目录下的子路径~$PWD当前工作目录~-$OLDPWD上一个工作目录~-这个用法特别实用。比如你在/etc/nginx和/var/log/nginx之间来回切换直接cd ~-就能跳回上一个目录比敲cd -还直观其实cd -也是同样的效果但~-可以嵌在更长的路径里比如cd ~-/conf.d。有个坑我必须提醒~的展开只在 shell 层面生效。如果你把~写在引号里比如cd ~/docsshell 就不会展开它cd会去找一个名字真的叫~的目录结果当然是报错No such file or directory。同理在脚本里用变量拼接路径时也要小心cd $DIR/~这种写法是不会展开的。2.3 cd /根目录不是全部别搞混cd /就是切到文件系统的根目录。这里要澄清一个新手常见的误解根目录/不是所有文件的总和它是整个目录树的起点所有其他路径都是从它往下延伸的。你可以用ls /看看根目录下有什么典型的结构包括/bin、/sbin基础命令/etc配置文件/home普通用户主目录/rootroot 用户主目录/var可变数据比如日志/tmp临时文件/usr用户程序和数据/proc、/sys内核暴露的虚拟文件系统为什么很多人会把cd /和cd ~搞混因为 Windows 里没有根目录和用户目录这种清晰的分层概念C 盘既是系统盘又是用户数据盘。到了 Linux/是系统级起点~是用户级起点两者完全不是一回事。我在带新人的时候最常纠正的就是这个你要找自己的文件去~你要找系统配置去/etc/只是路过的地方别在那待着。还有一个细节普通用户对/通常只有读和执行权限没有写权限。你cd /之后想touch test.txt会直接报Permission denied。这不是 bug是设计如此。2.4 cd ..向上跳一级以及那些容易翻车的边界..代表父目录parent directorycd ..就是往上走一层。这个用法看似简单但边界情况特别多。先看基本行为cd /home/user/docs pwd # /home/user/docs cd .. pwd # /home/user连续向上可以用cd ../..跳两级。但这里有个反直觉的点在根目录执行cd ..不会报错也不会去更上层而是原地不动。因为/的父目录就是它自己。你可以试试cd / cd .. pwd # 还是 /这个特性在脚本里是把双刃剑。好处是循环向上找文件时不会因为到顶而崩掉坏处是如果你写了个while循环靠cd ..往上爬到根目录后会陷入死循环。我见过一个备份脚本就是这么写的跑到根目录后一直空转把 CPU 占满了。另一个坑是符号链接。假设/home/user/link是一个指向/data/project的软链接你cd /home/user/link进去后pwd显示的是/home/user/link逻辑路径但cd ..会把你带到/home/user还是/data答案是取决于 shell 的-P和-L选项默认行为下cd ..走的是逻辑路径回到/home/user。如果你想要物理路径行为得用cd -P ..。这个差异在部署脚本里经常引发文件明明在怎么找不到的诡异问题。注意涉及软链接目录时先用pwd -P看看物理路径到底是什么再决定用cd ..还是cd -P ..能省下大量排查时间。2.5 cd /home绝对路径的确定性优势cd /home用的是绝对路径从根目录开始一路写全。它的最大价值就是确定性——不管你现在在哪执行完一定在/home。对比一下相对路径cd home如果你当前在/它会去/home如果你在/etc它会去找/etc/home大概率报错。所以我在写脚本、写文档、给别人指路的时候一律用绝对路径。相对路径只适合交互式操作里图省事。/home这个目录本身也值得说两句。在大多数发行版里它是所有普通用户主目录的父目录结构通常是/home/用户名/。但注意root 用户的主目录不在/home下而是/root。这是历史遗留设计早期是为了让 root 在/home挂载失败时也能登录。所以cd /home之后你ls是看不到 root 的家目录的。另外有些服务器会把/home单独挂载到一个大容量分区甚至用网络存储。这时候cd /home可能会因为挂载点没就绪而卡住或者进到空目录。判断方法很简单df -h /home mount | grep home如果df显示的是独立设备说明/home是单独挂载的操作前最好确认挂载状态。3. 实操验证把五种写法跑一遍并观察差异3.1 搭建一个干净的验证环境光看理论容易记混我建议你跟着下面这套流程亲手跑一遍。准备一台 Linux 环境虚拟机、云主机、WSL 都行我用的是 Ubuntu 22.04其他发行版行为基本一致。先建一个测试用的目录结构方便观察mkdir -p /tmp/cdtest/a/b/c cd /tmp/cdtest/a/b/c pwd现在你在最深层/tmp/cdtest/a/b/c接下来我们逐个验证。3.2 逐条执行并记录 pwd 输出按顺序执行下面这组命令每条后面跟一个pwd把结果记下来# 测试 1cd .. cd .. pwd # 预期/tmp/cdtest/a/b # 测试 2连续向上 cd ../.. pwd # 预期/tmp # 测试 3cd / cd / pwd # 预期/ # 测试 4cd /home cd /home pwd # 预期/home # 测试 5cd ~ cd ~ pwd # 预期/home/你的用户名 # 测试 6cd 空参 cd /tmp cd pwd # 预期/home/你的用户名跑完这六条你应该能直观感受到cd ..是相对的、依赖当前位置cd /和cd /home是绝对的、结果固定cd ~和裸cd都指向家目录。3.3 用 cd - 和 ~- 提升切换效率再补两个提效技巧。cd -会在当前目录和上一个目录之间来回跳cd /etc cd /var/log cd - pwd # 预期/etc cd - pwd # 预期/var/log这个在改配置—看日志—改配置的循环里特别好用。~-效果一样但能嵌进路径cd /etc/nginx cd /var/log/nginx cd ~-/conf.d pwd # 预期/etc/nginx/conf.d3.4 观察 CDPATH 对 cd 的隐藏影响有个变量叫CDPATH它会改变cd查找相对路径的行为。默认是空的但如果你在.bashrc里设了它cd就会先去CDPATH列出的目录里找export CDPATH/tmp/cdtest cd a pwd # 如果 CDPATH 生效会跳到 /tmp/cdtest/a这个特性在交互式使用里能省事但在脚本里是灾难——因为脚本期望的相对路径行为被悄悄改掉了。所以脚本开头最好unset CDPATH或者用绝对路径。我踩过一次坑本地测试好好的脚本上了服务器就找不到目录查了半天才发现是运维在全局 profile 里设了CDPATH。4. 常见问题与排查技巧实录4.1 报错信息速查表下面这张表是我这些年遇到最多的cd相关报错按出现频率排序报错信息常见原因解决思路No such file or directory路径不存在或~被引号包住没展开用ls确认路径去掉引号Not a directory目标是个文件不是目录ls -l看类型Permission denied没有该目录的执行权限ls -ld看权限位检查 x 位Too many levels of symbolic links软链接成环ls -l追链接用-P绕过cd: OLDPWD not set首次登录就cd -先正常cd一次4.2 权限问题为什么我能看到目录却进不去Linux 目录的权限里执行位 x 决定能不能进入读位 r 决定能不能列出内容。这俩是分开的。所以会出现我能ls看到这个目录名但cd进去就 Permission denied的情况——因为父目录有 r 没 x。# 复现 mkdir /tmp/nox chmod 644 /tmp/nox cd /tmp/nox # 报错Permission denied解决就是给执行位chmod x /tmp/nox。这个知识点在排查服务启动失败、配置文件读不到时特别有用因为很多时候不是文件权限问题而是路径上某一级目录缺 x 位。4.3 软链接目录下的 cd .. 陷阱前面提过这里展开说。假设mkdir -p /data/real ln -s /data/real /tmp/link cd /tmp/link pwd # /tmp/link cd .. pwd # /tmp默认cd ..回到了/tmp而不是/data。如果你期望的是物理路径行为得这样cd -P /tmp/link pwd # /data/real cd .. pwd # /data判断当前 shell 用的是哪种模式看pwd输出和pwd -P是否一致即可。部署脚本里如果涉及软链接目录我强烈建议统一用cd -P避免逻辑路径带来的歧义。4.4 脚本里 cd 失败的静默陷阱这是最阴险的一类问题。看这段脚本cd /nonexistent/path rm -rf *如果cd失败了脚本不会停rm -rf *会在当前目录执行。要是当前目录恰好是/或者某个重要目录后果不堪设想。正确写法是cd /nonexistent/path || exit 1 rm -rf ./*或者更严格set -e cd /nonexistent/path rm -rf ./*set -e让脚本在任何命令失败时立即退出。我现在的习惯是任何脚本开头都写set -euo pipefail这三个选项能挡掉绝大多数静默失败。另外rm -rf *最好写成rm -rf ./*多一个点能避免某些极端情况下*展开异常。提示涉及删除、覆盖的脚本cd后面一定要跟|| exit并且删除目标尽量用绝对路径或先pwd确认。这个习惯帮我躲过了至少两次生产事故。4.5 切换用户后 cd 行为异常用su或sudo -i切换用户时HOME变量的更新时机和方式不一样。su - username带横杠会完整加载目标用户的登录环境HOME正确su username不带横杠则保留原环境HOME可能还是旧用户的。这时候裸cd就会去错地方。排查方法whoami echo $HOME cd pwd三个输出对不上就是环境变量没切干净。解决就是养成用su -或sudo -i的习惯或者在命令里显式指定HOME/home/target。5. 把这些细节变成肌肉记忆5.1 我的日常使用习惯清单用了这么多年我总结出一套自己的cd使用原则分享给你交互式操作优先用cd -和~-提效少敲长路径写脚本一律绝对路径开头set -euo pipefailcd后跟|| exit涉及软链接先pwd -P确认物理路径必要时cd -P切换用户用su -或sudo -i切完先echo $HOME确认删除操作前先pwd再动手rm目标写./前缀这些不是死规矩但每一条背后都有我踩过的坑。你可以根据自己的环境调整核心思路就一个让路径行为可预测。5.2 给新手的三个练习建议如果你刚开始学 Linux我建议这样练第一把/tmp/cdtest那套目录结构建出来把本文所有命令亲手跑一遍别只看。第二故意制造几个错误——比如cd一个不存在的目录、cd一个没权限的目录、在软链接里cd ..观察报错和实际行为。第三写一个五行的脚本故意让cd失败看看不加|| exit会发生什么加深印象。cd这个命令敲一万遍都不嫌多。真正拉开差距的不是你知道它怎么用而是你知道它在什么情况下会不按你想的来。把这五种写法的边界都摸清楚你在 Linux 上的每一步都会走得更稳。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

WinCC OA 3.19低代码SCADA模板库:从部署到画面定制的实战指南 2026/9/26 19:15:57

WinCC OA 3.19低代码SCADA模板库:从部署到画面定制的实战指南

简介:面向工控与过程自动化开发者的WinCC OA 3.19轻量级低代码SCADA模板库设计源码,旨在以预制组件和可视化配置替代传统大量编码,压缩监控系统开发周期,适合具备一定WinCC OA基础、希望快速搭建HMI与数据采集界面的工程师学习使用…

阅读更多 →
杜比5.1声道测试视频正确使用与真伪鉴别指南 2026/9/26 19:15:57

杜比5.1声道测试视频正确使用与真伪鉴别指南

1. 这不是普通测试片,而是音频工程师手里的“听诊器” 你搜到这个标题时,大概率正被家里那套新买的回音壁、Soundbar或者家庭影院系统折腾得够呛——明明标着“DOLBY 5.1”,可看电影时总觉得声音“平”、定位“糊”、低频“飘”,连…

阅读更多 →
苹果树叶病害检测实战:916张数据集与YOLOv8训练全流程 2026/9/26 19:15:57

苹果树叶病害检测实战:916张数据集与YOLOv8训练全流程

简介:面向智慧农业与病害智能识别场景,该数据集包含916张苹果树叶实拍图像,覆盖花叶病、斑点落叶病和叶枯病三类常见叶片病害。图像背景多样,目标大小不一,角度丰富且分布均匀,适合课程设计、算法比赛及实际…

阅读更多 →
Atlas 300V 24G部署YOLO:AI推理加速卡实战与避坑指南 2026/9/26 19:15:51

Atlas 300V 24G部署YOLO:AI推理加速卡实战与避坑指南

你是不是也被"atlas部署yolo"这个搜索组合带到这里来的?如果是,恭喜你,你大概率正在经历和我当初一样的困惑:手头有一张Atlas 300V 24G,听说它是运算加速卡,可插上去之后,既不能像NVI…

阅读更多 →
牡丹江义诺咨询人力托管服务,适配初创公司及成长型企业的灵活用工配置方案 2026/9/26 19:15:51

牡丹江义诺咨询人力托管服务,适配初创公司及成长型企业的灵活用工配置方案

行业基础科普:灵活用工与人力托管的核心认知说起人力托管,很多人对这个词汇还带着模糊的认知,其实它脱胎于灵活用工与人力资源服务外包赛道,本质是企业将非核心的人员管理、用工相关事务整体委托给专业的第三方服务机构&#xff0…

阅读更多 →
定制花束性价比好的大型花店选购参考汇总 2026/9/26 19:15:51

定制花束性价比好的大型花店选购参考汇总

阜阳定制花束怎么选?这份高性价比花店选购参考请收好想要在阜阳挑选到定制花束性价比不错的按需定制花店,既能满足个性化设计需求,又不会出现虚高溢价,其实需要结合花材品质、配送服务、售后保障多个维度筛选,阜阳市颍州区拾悦花…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉