【免费下载链接】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 仓库中 Linux 基础练习「Create & Destroy」展开,以 touch、mkdir、mv、rm 四个核心命令为主线,带领读者完整走一遍「建文件 → 建目录 → 移动 → 建嵌套结构 → 递归删除」的实战流程。读完本文,你将不仅能独立完成该练习的全部目标,还能理解每个命令的参数语义、安全边界与验证方法,为后续 DevOps 日常操作打下扎实的文件系统基本功。
练习全景:六个目标对应四类命令
练习原文位于 topics/linux/exercises/create_remove/README.md,标准解法保存在同目录下的 solution.md。仓库根目录的 Linux 主题索引 将其归类于 Linux Exercises 的 Basics(基础) 板块,标注主题为 touch, rm, mkdir,与 Navigation(cd, pwd)、Copy Time(touch, cp, ls)共同构成入门三连。
六个目标与对应的命令映射如下:
| 目标 | 任务描述 | 核心命令 | 关键参数 |
|---|---|---|---|
| 1 | 创建名为 x 的文件 | touch | 无(创建空文件) |
| 2 | 创建名为 content 的目录 | mkdir | 无(创建单层目录) |
| 3 | 将 x 文件移动到 content 目录 | mv | 无(移动路径) |
| 4 | 在 content 目录内创建文件 y | touch | 带目录前缀的路径 |
| 5 | 在 content 内创建 dir1/dir2/dir3 结构 | mkdir | -p(递归创建) |
| 6 | 删除整个 content 目录 | rm | -r + -f(递归强制) |
环境要求与准备工作
本练习不需要安装任何额外软件,仅需一个可用的 Linux 环境(任何主流发行版均可,练习目录本身即按 Linux 环境设计)。建议准备一个空的工作目录用于实操,避免误操作影响真实数据。你可以通过 pwd 确认当前所在位置,用 ls 观察文件变化,这两条命令与 cd 一起在配套的 navigation 练习 中有更系统的训练。
开始前不妨在练习目录下先执行一次 ls -l,记录当前的目录内容快照,作为后续验证的基线。
第一步:用 touch 创建文件 x
touch x
touch 的原始用途是更新文件的访问时间与修改时间戳,但在日常使用中最常见的场景正是「创建一个空文件」——如果目标文件不存在,touch 会直接以 0 字节大小创建它。仓库的 Linux 问答部分对它的定义是:update file's timestamp. More commonly used for creating files(参见 topics/linux/README.md),与这里的用法完全一致。
几条实用变体:
touch a b c # 一次创建多个文件
touch -d "2026-01-01 08:00" x # 同时将文件时间戳设为指定时间
touch -t 202601010800 x # 用 [[CC]YY]MMDDhhmm[.ss] 格式设置时间
验证方式:ls -l x 应显示大小为 0 的文件条目。
第二步:用 mkdir 创建目录 content
mkdir content
mkdir 是 make directory 的缩写,用于创建目录。默认情况下它会拒绝创建「父目录尚不存在」的多层路径,因此先创建单层 content 是正确起点。若此时误写为 mkdir dir1/dir2 而 dir1 不存在,会得到 No such file or directory 错误——这正是后面第五步使用 -p 参数的原因。
验证方式:ls -ld content 应显示一个以 d 开头(目录类型)的条目。
第三步:用 mv 移动文件 x 到 content
mv x content
mv(move)负责两件事:移动和重命名。把文件移动到目录内是移动;而把文件改个名字、把目录改个名字,本质上也是同一操作。仓库的 Linux 问答在回答「How to rename the name of a file or a directory?」时明确指出使用 mv 命令。配套的 copy 练习 中还演示了用 mv 同时移动多个文件(mv x files | mv y files)以及把目录 copy_of_files 重命名为 files2 的用法。
常用变体:
mv x content/ # 移动并保持文件名(等价写法)
mv oldname newname # 重命名
mv -i x content # 交互模式,目标存在时先询问(推荐习惯)
mv -v x content # 显示移动过程详情
验证方式:ls content 应能看到 x;原路径下 ls x 应报「文件不存在」。
第四步:在目录内创建文件 y
touch content/y
这一步与第一步的区别只在于路径:touch 接受带目录前缀的相对路径或绝对路径。它同时检验了你对「路径」的理解——content/y 是相对当前目录解析的,因此必须先位于 content 的父目录中执行。若想验证路径解析,可先 cd content 再执行 touch y,效果相同。
验证方式:ls content 应同时看到 x 和 y。
第五步:用 mkdir -p 递归创建嵌套结构
mkdir -p content/dir1/dir2/dir3
-p(--parents)是本次练习最有价值的参数:它允许一次性创建多层不存在的父目录,且当目标目录已存在时不会报错(幂等)。如果不加 -p,mkdir content/dir1/dir2/dir3 会因为 dir1、dir2 尚未创建而失败;加了 -p 后一条命令即可生成完整的树状结构:
content/
├── dir1/
│ └── dir2/
│ └── dir3/
├── x
└── y
配套用法还包括:
mkdir -p content/dir1/dir2/dir3 # 已存在时重复执行也不会报错
mkdir -m 755 content/scripts # 创建目录的同时设置权限
关于 -r/-R 递归参数,仓库问答中有一处精辟概括:The -r (or -R in some commands) flag allows the user to run a certain command recursively——mkdir -p 的本质正是对目录创建过程的「递归」处理。
验证方式:ls -R content 或 tree content(若已安装 tree)即可查看整棵目录树。
第六步:用 rm -rf 销毁目录
rm -rf content
rm 用于删除文件与目录。单独一个 rm 只能删除空目录(实际上更准确地说,删除目录需要 -r);content 中已有文件与嵌套目录,因此必须组合使用:
-r/-R:递归删除,进入目录逐层清除所有内容;-f:force(强制),忽略不存在的文件、不再逐个询问确认;- 二者叠加即
rm -rf,仓库问答中「Remove a directory with files」场景的标准答案正是rm -rf dir。
需要特别强调的安全准则:
rm -rf不可逆,删除的数据不会进入回收站,务必确认目标路径后再回车;- 避免使用
rm -rf /、rm -rf ~、rm -rf *等危险组合,必要时先pwd核对位置; - 生产环境或关键目录建议改用
rm -i、rm -I(删除前询问),或给rm设置 alias 增加保护; - 即使要删,也习惯性先
ls预览目录内容,确认没有需要保留的文件。
验证方式:ls 应不再看到 content;再执行 ls content 应报 No such file or directory,至此整个练习闭环完成。
完整解法与逐行注释
将六个步骤串起来,即为 solution.md 中的标准答案,这里附上逐行注释:
touch x # 目标1:创建空文件 x
mkdir content # 目标2:创建目录 content
mv x content # 目标3:把 x 移入 content
touch content/y # 目标4:在 content 内创建文件 y
mkdir -p content/dir1/dir2/dir3 # 目标5:递归创建三层嵌套目录
rm -rf content # 目标6:递归强制删除整个 content
验证技巧与自测清单
练习完成后,建议用以下命令逐项核对,形成「操作 + 验证」的闭环习惯:
| 验证命令 | 预期结果 |
|---|---|
ls -l x | 0 字节的空文件 |
ls -ld content | 以 d 开头的目录条目 |
ls content | 同时出现 x、y、dir1 |
ls -R content | 完整展开 dir1/dir2/dir3 嵌套树 |
ls(删除后) | 不再包含 content |
这与仓库中 Navigation 练习 的做法一脉相承——该练习在要求 cd 到根目录后,明确要求用 pwd 验证当前位置,体现了「执行命令后主动验证」的训练理念。
进阶:与其他练习联动
本练习不是孤立存在的,仓库将 Linux 基础练习设计成渐进式体系:
- Navigation:训练
cd/pwd,解决「在哪、去哪」的问题,是文件操作的前提; - Create & Destroy(本篇):训练
touch/mkdir/mv/rm,解决「怎么建、怎么移、怎么删」的问题; - Copy Time:在创建与移动的基础上叠加
cp/ls,训练「复制 + 批量移动 + 目录拷贝 + 重命名 + 批量删除」的完整链路。
建议按「导航 → 创建与销毁 → 复制」的顺序连续训练,三者叠加基本覆盖了日常文件系统操作的全部核心命令。在面试场景中,这些命令也常以问答形式出现(见 topics/linux/README.md 的 Linux 101 章节),例如 ls -l 各字段含义、mv 重命名、rm -rf 删除带文件目录等,均可从本次实战中获得一手理解。
常见问题与排查思路
touch创建的文件在哪? 相对路径创建在当前位置,可用pwd确认;若想定向创建,直接写touch /tmp/x这类绝对路径(Copy Time 练习的解法即使用了/tmp/x)。mkdir报No such file or directory? 说明父目录缺失,改用mkdir -p即可递归补建。rm content报is a directory? 说明缺少递归参数,非空目录必须rm -r或rm -rf。- 误删了怎么办?
rm没有回收站机制,删除即永久;应对策略是删除前用ls预览、用mv到临时目录替代直接删除、对重要目录定期备份。
小结
通过 devops-exercises 的「Create & Destroy」练习,我们完整掌握了 Linux 文件系统操作的最小闭环:touch 建文件、mkdir/mkdir -p 建目录与嵌套结构、mv 移动与重命名、rm -rf 递归删除,并学会了用 ls/pwd 做结果验证。这四类命令是脚本编写、日志清理、部署打包等 DevOps 日常工作的基石——熟练掌握它们,配合仓库中 Copy Time 与 Navigation 两个进阶练习,即可建立起一套完整、安全、可验证的 Linux 文件操作能力。
【免费下载链接】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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



