
cmdchamp v1.2.14
bash CLI 训练器 — 从 ls 到权限提升的 30 个级别
cmdchamp
Bash CLI 训练器 — 从 ls 到权限提升,共 30 个关卡。

每个问题都要求你输入一条真实的命令 — 获得即时反馈,然后继续。答错时它不只是给你看答案:它会展示你的命令输出与期望输出之间的差异,对于管道命令还会显示每个阶段的输出行数,让你看到它在哪一步出了问题。对于文本匹配的问题,它会指出你的答案最接近哪个可接受答案,以及你遗漏的具体标志。用繁琐的方式答对后,它会展示简洁方式 — cat f | grep -c X 会得到 Shorter: grep -c X f,不仅在字符数更少时触发,在管道阶段更少时也会触发,因为你节省的进程本身就是一课。许多问题针对沙箱中的真实文件运行,并且所有问题都接受多种有效语法(sort -u 或 sort | uniq)。当你需要参考时,按 Tab 可切换手册页 — 为答案运行的每条命令以及它所依赖的 shell 语法(x=$(cmd)、${var:-default}、${path##*/})都提供了精简页面,因此问题中的任何内容都不需要你去猜测。每次运行的顺序都是随机化的,所以你无法死记硬背。精通度会跟踪你的掌握情况:同一问题答对两次即可精通,答错则会降级,使其更快再次出现。连续答对 5 题会触发火焰模式 — 一个持续到你答错为止的横幅。
每个关卡都以 Boss 回合结束 — 无手册页,30 秒计时器,5 题中答对 4 题即可通过。失败后你可以立即重试 Boss 或返回练习。通关全部 30 关后,挑战模式解锁 — 终局试炼:将整个游戏中的工具组合成一条管道的多命令链。每题 30 秒,只有一条命,无手册页,你的最佳成绩就是纪录。每条链都根据其在沙箱中的真实输出进行评分,因此任何正确的管道都能通过。每次运行还会构建一个全新的随机化沙箱 — 不同的 IP、计数、主机和日志数据 — 并从 50+ 个链模板中抽取,带有轮换的分隔符、排序顺序和聚合方式,因此最繁忙的 IP、排名最高的 URL、最高的计数永远不会重复出现。首次运行包含一个简短的教程和一个分级测试,让你跳过已经掌握的关卡。
借助 bubblewrap,命令在真实的沙箱文件系统中运行,并根据其实际输出进行评分。内部的盒子是合成的 — 用户 sandbox、主机 sandbox、它自己的 /etc/passwd 和内核命令行 — 因此你输入的任何内容都不会将你的真实用户名、机器名或磁盘布局打印到屏幕上,并且 id、whoami 和 hostname 在任何地方都返回相同的答案。这现在也延伸到了取证层级:第 28 关会给你一个真实的示例二进制文件(samples/target.bin),并评分你是否真正从中提取出了 flag、外传域名和泄露的 API 密钥 — 对真实 JSON 的 jq 问题也是如此。终局试炼将这些提取组合成限时链。第 24-25 关现在也真实运行:一个小型 HTTP 服务在沙箱自己的网络命名空间内的 localhost:8080 上启动,同时你的答案运行,有三个端口在监听,因此 curl、通过 HTTP 的 jq、ss 和 nmap 会根据它们实际返回的内容进行评分。你的机器不会暴露任何内容 — 命名空间仍然阻止所有出站连接,并且该端口从外部不可见。只有那些真正无法在沙箱中运行的工具 — wifi/RF、实时捕获和大内存/磁盘取证 — 才保持文本匹配。搜索关卡(16-17)同时接受 rg/fd 和 grep/find 语法。内置 Vi 行编辑 — 移动、操作符、计数、寄存器、撤销和可视模式(v/V,o 交换端点),? 查看完整映射。
安装
Arch(AUR):
paru -S cmdchamp # 或:yay -S cmdchamp
任意位置(单文件):
mkdir -p ~/.local/bin && curl -sL https://raw.githubusercontent.com/mellen9999/cmdchamp/main/cmdchamp -o ~/.local/bin/cmdchamp && chmod +x ~/.local/bin/cmdchamp
如有需要,将 ~/.local/bin 添加到 PATH:echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
或克隆:
git clone https://github.com/mellen9999/cmdchamp.git
cd cmdchamp && make install
要求: bash 4.4+、coreutils、awk
macOS: 自带 bash 3.2 — 请先安装 bash 4.4+:brew install bash
可选: bubblewrap(bwrap)用于沙箱模式(仅限 Linux)— 大多数桌面发行版都包含它。没有它,答案仅进行文本匹配
可选: python3 — 为沙箱的 localhost HTTP 服务提供服务,因此第 24-25 关的 live api / live box 问题会根据真实输出进行评分。没有它,这些问题会回退到文本匹配;其他一切不变
无障碍: 支持 NO_COLOR 和 TERM=dumb。布局适应 COLUMNS / tput cols。精通度条同时带有颜色和 ✓ / ~ / x 符号 — 无颜色也可读。
终端: 可在真实的串行终端上运行,而不仅仅是模拟器。cmdchamp 会探测终端实际能显示的内容,并从三种渲染层级中选择一种 — Unicode、DEC ACS 线条绘制或纯 ASCII — 因此框架在 VT100/VT220/VT320/VT420 或 Wyse 上也能保持完整。在单色屏幕上,颜色区分会重新编码为粗体/反显。使用 CMDCHAMP_ASCII=1 或 CMDCHAMP_UNICODE=1 强制指定层级。./test_terminals.sh 可验证。
用法
cmdchamp # 启动游戏菜单
cmdchamp explain 'CMD' # 解释任何命令 - 每个标志,以及周围的 shell 语法
cmdchamp autopsy # 读取你自己的 shell 历史并将其映射到课程上
cmdchamp daily # 玩今天的每日试炼(每个人运行相同)
cmdchamp daily 2026-02-16 # 重放特定某天的运行(与朋友比赛)
cmdchamp play # 自由练习沙箱:输入任何命令,查看其运行
cmdchamp --no-sandbox # 禁用沙箱(仅文本匹配)
cmdchamp reset # 清除所有进度
cmdchamp test # 运行自测
cmdchamp version # 打印版本
cmdchamp help # 显示帮助
cmdchamp explain(或 cmdchamp x)是 Tab 面板的独立工具版本:约 300 条命令的手写页面以及周围的 shell 语法,离线、无网络、无依赖。它接受带引号的命令或裸词,当两者都没有时读取 stdin — 因此 history | tail -1 | cmdchamp x 会解释你刚刚运行的命令。认识该命令时退出码为 0,不认识时为 1。
cmdchamp autopsy 读取你的 shell 历史 — $HISTFILE,然后是 ~/.bash_history,然后是 ~/.zsh_history,或你指定的文件,或 - 表示 stdin — 并将其映射到 30 个关卡:你实际会使用什么、值得改掉的习惯(每个旁边都有你自己的计数)(cat 接 grep、find 接 xargs 但没有 -print0、chmod 777、curl | sh)、游戏教授的命令中你实际运行过多少条,以及最早出现空白的关卡。它只打印模式和计数 — 绝不打印你历史中的任何一行、片段或"示例",因为历史中保存着作为参数输入的令牌和密码。没有任何内容离开你的机器,也没有任何标志可以让它回显你的历史。
菜单包含继续、新游戏、场景、挑战、每日、练习、统计、选项、帮助和退出,使用固定热键 1-9 和 0。未解锁的行会灰显而不是隐藏,因此标签旁边的数字在你推进时永远不会移动。j/k 或方向键移动,Enter 选择,q(或 Esc)退出。练习场位于场景列表的顶部 — 它是唯一永远不会被锁定的条目。帮助是参考手册,共三页:每个按键、每种模式的花费和解锁条件、评分和衰减如何工作、统计标记的含义、答案如何被评判,以及每个环境变量。首次运行的教程在最后一页上仍然只需一次按键即可访问。
每日(ROOT 之后)是一个以日期为种子的试炼运行 — 种子同时驱动链和随机化沙箱,因此每个人在当天都会获得字节级相同的问题和数据,一次计分尝试、连续天数记录,以及一个可复制的分数供你分享。练习可演练任何已到达的关卡(显示其精通度百分比),带提示且无计时器,不会影响你的主进度。练习场是一个被攻破的盒子,你用真实的 shell 将其拆解:有人入侵、使用,然后试图清理,每一步都在磁盘上留下了痕迹。命令在沙箱中真实运行,且不进行评分。树中埋藏了最多 8 个 flag{...} 令牌(随着你通关关卡会解锁更多),map 按阶段展示入侵过程并标记你所在的位置,learn 是背后的 8 模块安全课程,hint 每次询问都会深入一层,Tab 解释你输入的内容。标题始终标明你正在搜寻的阶段及其留下的文件,因此你永远不会面对一个不知道把命令指向何处的提示符 — 如果六条命令过去仍一无所获,第一个提示会主动出现。
统计
两页。第一页是三十个关卡进度条 — 你走了多远。第二页是将相同的精通度投射到命令上,最弱的在前,因为关卡作为练习的粒度太粗了:仅第 13 关就教授 cp、mv、ln、chmod、ACL、du、tar 和 diff,一条红色进度条无法说明你一直遗漏的是哪一个。只计算你已到达的关卡,网格限制为一屏 — 需要滚动的工作清单不是工作清单。在其下方,三条最弱的命令会标注教授它们的关卡,因此页面在练习开始处结束 — 关卡名称是主题性的,如果你必须猜测 xargs 0/4 位于批处理操作中,那它就是一个死胡同。
关卡
| # | 名称 | 重点 |
|---|---|---|
| 基础 | ||
| 1 | 第一步 | pwd, ls, echo, cd, mkdir |
| 2 | 文件基础 | cp, mv |
| 3 | 保存你的工作 | >, >>, tee |
| 4 | 读取文件 | cat, head, tail, less |
| 5 | 基本管道 | pipes, grep, wc, sort, uniq |
| 6 | 输入与 Here-Strings | <, <<<, tr, cut, rev, bc |
| 7 | 错误处理 | 2>, 2>&1, &>, /dev/null |
| 8 | 逻辑门 | &&, || |
| 9 | 变量 | $VAR, 赋值, 展开 |
| 10 | 特殊变量 | $$, $?, $!, $#, $@, $0 |
| 11 | 作业控制 | bg, fg, jobs, &, Ctrl+Z, nice, ulimit |
| 12 | 测试条件 | -f, -d, -z, -n, -eq, -lt |
| 13 | 核心文件工具 | cp, mv, ln, chmod, ACLs, du, tar, diff |
| 14 | 系统管理 | ping, df, free, ss, systemctl, ip, sysctl, lsblk, getent |
| 15 | 多路复用器 | tmux: 会话、窗口、窗格 |
| 16 | 文本搜索 | grep, ripgrep, regex |
| 17 | 文件查找 | find, fd, 按名称/大小/时间/类型 |
| 18 | 数据处理 | sort, uniq, cut, awk, tr, comm, join, numfmt |
| 19 | 字符串与数组 | 参数展开, 数组 |
| 20 | 控制流 | if/else, 循环, case, 函数 |
| 21 | 批处理操作 | find -exec, xargs, sed -i, crontab |
| 22 | 高级正则 | lookahead, sed, awk |
| DevOps 与安全 | ||
| 23 | Git | 分支、远程、变基、暂存、bisect |
| 24 | 网络工具 | tshark, curl, jq, ssh 隧道, openssl, SMB, 一个实时 HTTP 端点 |
| 25 | 网络扫描 | nmap, 服务检测, 脚本, 一个实时目标 |
| 26 | WiFi 与 RF | aircrack-ng, netcat, tcpdump, 无线侦察 |
| 27 | 哈希破解 | hashcat, john, hydra, 编码 |
| 28 | 取证 | strings, readelf, binwalk, volatility, exiftool |
| 29 | 权限提升 | SUID, capabilities, GTFOBins, 枚举 |
| 30 | ROOT | 紧急恢复, chroot, 离线生存 |
场景
多步骤沙箱挑战 — 状态在步骤之间持续存在。通关解锁 Boss 后可从场景菜单访问,该菜单按解锁顺序在练习场下方列出它们。下面的数字是场景 ID,永远不会改变。
| # | 名称 | 解锁条件 | 步骤 |
|---|---|---|---|
| 1 | 权限锁定 | L13 Boss | 6 |
| 2 | 归档与解压 | L13 Boss | 6 |
| 3 | 大海捞针 | L16 Boss | 7 |
| 4 | 混乱的 CSV | L18 Boss | 4 |
| 5 | 事件 | L18 Boss | 5 |
| 6 | 失败的部署 | L21 Boss | 7 |
| 7 | 日志紧急情况 | L21 Boss | 5 |
| 8 | 配置手术 | L21 Boss | 5 |
| 9 | Git 救援 | L23 Boss | 6 |
| 10 | 批处理重构 | L21 Boss | 6 |
| 11 | 取证清扫 | L22 Boss | 6 |
| 12 | 通配符备份 | L29 Boss | 4 |
| 13 | PATH 劫持 | L29 Boss | 4 |
场景 12–13 是漏洞利用盒子:你植入真实的 tar-checkpoint 注入 / PATH 劫持,并根据其产生的工件进行评分(出现一个文件、一个秘密被外传)。漏洞利用的效果在沙箱中真实运行;权限边界是模拟的 — 没有任何东西以真实 root 身份运行。
分级测试
首次运行教程之后,系统会询问你是否要参加分级测试以跳过前面的关卡。接受后,每个关卡运行 2 个问题,每题 30 秒,无手册页。答错一个,那就是你的起始关卡。
彩蛋
8 个隐藏成就。统计屏幕会显示你已找到多少个。
控制
| 按键 | 操作 |
|---|---|
| Enter | 提交答案 |
| Tab | 切换手册页 |
| Ctrl+d | 退出(会话摘要) |
| Esc | Vi 普通模式 |
| ? | 所有按键绑定(普通模式) |
数据
进度保存到 ${XDG_DATA_HOME:-~/.local/share}/cmdchamp/。
许可证
MIT