devops-exercises 实战指南:用 touch / mkdir / mv / rm 掌握 Linux 文件与目录的创建与销毁

  • 文档
  • 教程
  • 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

项目地址: https://gitcode.com/GitHub_Trending/de/devops-exercises
点击查看 免费下载

本文围绕 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 目录内创建文件 ytouch带目录前缀的路径
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。

需要特别强调的安全准则:

  1. rm -rf 不可逆,删除的数据不会进入回收站,务必确认目标路径后再回车;
  2. 避免使用 rm -rf /、rm -rf ~、rm -rf * 等危险组合,必要时先 pwd 核对位置;
  3. 生产环境或关键目录建议改用 rm -i、rm -I(删除前询问),或给 rm 设置 alias 增加保护;
  4. 即使要删,也习惯性先 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 x0 字节的空文件
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
  • 运维

【免费下载链接】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

项目地址: https://gitcode.com/GitHub_Trending/de/devops-exercises
点击查看 免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值