- 文档
- 教程
- DevOps
- 运维
【免费下载链接】devops-exercises
Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions
本篇技术指南围绕当前开源仓库 devops-exercises 中 Navigation 练习 与其 参考答案 展开,系统讲解 Linux 中cd与pwd目录导航的核心命令与底层机制。读完本篇,你将掌握从/tmp出发、经由父目录逐级上溯回到根目录/、借助cd -快速往返上次访问目录的完整实战套路,并能理解$PWD与$OLDPWD环境变量在导航背后的工作原理,可直接用于日常终端操作与面试答题。
练习在仓库中的位置与设计意图
devops-exercises 仓库将 Linux 主题的实操题组织在 topics/linux 下,其中 "Basics" 基础练习共三题:Navigation(导航)、Create and Destroy(创建与删除)、Copy Time(复制与移动)。Navigation 作为第一题,专门聚焦两个命令:**cd(change directory,切换目录)**与pwd(print working directory,打印当前工作目录),两者是后续一切文件系统操作(创建、删除、复制、移动)的前提。
从 topics/linux/README.md 的练习索引可以看到,仓库为每个练习都配了独立的 Exercise 描述页与 Solution 答案页,Navigation 练习即由 exercise 页 和 solution 页 两个文件构成。这种"题目与答案分离"的结构,正是为了让学习者先独立思考、再对照校验。
练习目标:一段贯穿关键路径的导航旅程
原练习(exercise)提出了 6 个递进式目标,要求环境为任意 Linux 系统:
- 切换到
/tmp目录 - 移动到父目录
- 切换到 home 目录
- 移动到父目录
- 再次移动到父目录
- 此时你在哪里?用一条命令验证
- 切换到上次访问的目录
这 6 步串联起了 Linux 文件系统中的几个标志性位置:临时目录/tmp、家目录~(即/home/<用户名>)、父目录..,以及目录树的顶端根目录/。每一步都有明确的意图:熟悉相对导航、理解"当前位置"的概念、并接触"目录历史"这一高级特性。
参考答案与逐步演练
参考答案 给出的命令序列如下:
cd /tmp cd .. cd ~ cd .. cd .. # root (/) pwd cd -下面逐条拆解每条命令做了什么、为什么这么做,并给出每步之后预期处于的位置:
第 1 步:cd /tmp——用绝对路径直达临时目录
cd /tmp/tmp是 Linux 文件系统层次标准(FHS)中存放临时文件的目录,它通常会随系统重启被自动清理(这一特性在 topics/linux/README.md 的 FHS 问答中有明确说明)。这里的路径以/开头,是绝对路径——无论当前身处何处,都会直接切换到根目录下的tmp。执行后,当前工作目录变为/tmp。
第 2 步:cd ..——进入父目录
cd ....是表示父目录(当前目录的上一级)的特殊条目。当前在/tmp,其父目录就是/(根目录)。因此执行后位于/。
第 3 步:cd ~——回到家目录
cd ~~(波浪号)是 shell 对当前用户 home 目录的简写。对普通用户而言通常是/home/<用户名>,对 root 用户则是/root。这一步把当前目录从/切换到家目录,演示了家目录快捷方式的用法。
第 4、5 步:连续cd ..——逐级上溯直至根目录
cd .. cd ..此时你在/home/<用户名>(假设用户名user)。第一次cd ..进入/home,第二次cd ..进入/——这就是练习第 5 步中"再次移动到父目录"的答案:最终停在根目录,即整棵目录树的最顶端,其父目录是它自身,无法再继续上溯。
验证步:pwd——确认当前位置
pwdpwd是 Print Working Directory 的缩写,打印出当前所在目录的绝对路径。在连续两次cd ..之后,应该输出/,从而验证你确实到达了根目录。这也是练习目标 5.1 要求的"用一条命令验证"的标准答案。
第 6 步:cd -——回到上次访问的目录
cd -cd -是"切换到最后访问过的目录"的快捷方式。由于上一步你位于/,且在此之前刚从家目录一路cd ..上溯而来,cd -会把目录切回本次会话中上一个所在目录。在原练习的语境下,即回到步骤 3 之前或执行pwd之前所停留的位置(具体取决于 shell 对OLDPWD的记录时机),并且 shell 会同时在终端上打印目标路径。这一命令在"在两目录之间来回切换"的场景(如反复比对两个项目目录)中极为实用。
深入原理:cd与pwd背后的机制
cd是 shell 内建命令
cd属于 shell 内建命令(builtin),而非独立的可执行程序——因为它必须修改当前 shell 进程自身的工作目录,而子进程无法改变父进程的目录状态。这也是为什么cd在 bash、zsh 等常见 shell 中行为一致、且无需额外安装。
两个关键环境变量:$PWD与$OLDPWD
cd的核心机制由两个 shell 环境变量驱动:
$PWD:记录当前工作目录的绝对路径。pwd命令打印的内容本质上就是它的值。$OLDPWD:记录上一次工作目录的绝对路径。
仓库的问答题库中恰好收录了这一问题,见 topics/linux/README.md:
问:
cd -是如何工作的?它怎么知道之前的位置?答:$OLDPWD
也就是说,每次成功执行cd时,shell 先把当前路径存入$OLDPWD,再把新路径写入$PWD;执行cd -时,shell 读取$OLDPWD并切换过去。理解了这一点,你甚至可以用cd $OLDPWD显式复现cd -的效果,或在脚本中通过$OLDPWD判断"上次从哪个目录进来"。
常用cd形态速查
在 topics/linux/README.md 的 Linux 101 问答中,仓库系统总结了cd的六种典型形态及含义,可直接作为面试速查表:
| 命令 | 含义 |
|---|---|
cd / | 切换到根目录 |
cd ~ | 切换到你的 home 目录 |
cd(无参数) | 切换到你的 home 目录 |
cd .. | 切换到当前目录的上一级(父目录) |
cd . | 切换到当前所在目录(即原地不动) |
cd - | 切换到最后访问过的路径 |
pwd与"当前位置"的感知
pwd是验证导航结果的首选工具。除了配合练习使用,日常排障中它还有两个高频变体:
pwd -L:打印逻辑路径(跟随符号链接的路径,默认行为);pwd -P:打印物理路径(解析掉所有符号链接后的真实路径)。
当目录是通过符号链接进入时,两者输出可能不同,这也是定位"我到底在哪个真实目录"的常见手段。
结合文件系统层次:为什么练习刻意经过这几个目录
练习刻意安排的/tmp、~、/三个锚点,恰好对应 Linux 文件系统层次标准(FHS)中的典型目录,仓库在 FHS 问答 中给出了它们的职责:
/:文件系统的根,目录树的起点;/tmp:存放临时文件的目录,通常重启后被自动清理;/home:存放各用户 home 目录的位置(/home/<user>即某个用户的 home)。
理解了这些目录的语义,你就能预判"从某目录cd ..会到哪"——这正是导航练习想训练的核心能力:在脑中建立目录树的拓扑地图。
扩展技巧:超越单步cd的高效导航
在最近两个目录间快速往返
cd -解决了"两目录间往返"问题;若需要在更多历史目录间穿梭,可以使用:
pushd /path/to/dir # 压栈并切换 popd # 出栈并回到上一个压入的目录 dirs # 查看目录栈pushd/popd与cd -一样依赖 shell 维护的目录历史,适合在多个项目目录之间频繁切换的日常工作流。
相对路径与绝对路径的选择
- 绝对路径(以
/开头):如cd /etc/nginx,与当前位置无关,适合脚本与明确跳转; - 相对路径(不以
/开头):如cd ../..、cd dir1/dir2,依赖当前位置,适合在相邻目录间移动。
练习中的cd /tmp(绝对)与cd ..(相对)正好演示了两者的混合使用,这也是真实运维中最常见的组合方式。
如何在仓库环境中自主演练与验证
devops-exercises 不仅提供了静态的练习与答案,还配套了可交互的自测工具:
- scripts/random_question.py 会解析仓库
README.md中的问答对并随机抽题,通过-s/--skip参数可跳过无答案的题目,适合把 Linux 导航等知识做成刷题式训练; - scripts/question_utils.py 提供
get_answered_questions、get_random_question等函数,可编程化抽取题目; - scripts/count_questions.sh 统计仓库中的题目与练习总数,便于了解覆盖范围。
建议的实操路径:先独立完成 练习题目,再对照 参考答案 逐条执行并配合pwd验证每个中间状态;随后使用echo $PWD、echo $OLDPWD观察两个环境变量的变化,亲手确认cd -的底层依据;最后用pushd/popd/dirs体验目录栈导航,并回到 Linux 101 问答 检验自己对六种cd形态的掌握程度。整条链路从命令执行到机制理解、再到自测巩固,正是这份仓库练习设计的完整闭环。
- 文档
- 教程
- DevOps
- 运维
【免费下载链接】devops-exercises
Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions
相关推荐
Go 接口设计与组合:以 claude-skills 的 golang-pro Skill 为例的系统化实践指南
Go 接口设计与组合:以 claude skills 的 golang pro Skill 为例的系统化实践指南 本文基于 claude skills http
文档教程DevOps运维ItChat零基础入门:从安装到5分钟跑通第一个微信机器人教程
ItChat零基础入门:从安装到5分钟跑通第一个微信机器人教程 ItChat(itchat)是一个开源的 Python 微信个人号接口 ,让你用最少的代码完成微
文档教程DevOps运维devops-exercises 实战:用 Bash 脚本清理目录中的空文件(Empty Files 练习精讲)
devops exercises 实战:用 Bash 脚本清理目录中的空文件(Empty Files 练习精讲) 导读 本文围绕 devops exercise
文档教程DevOps运维
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考