Skip to content

CLI:用一行文字,明确告诉电脑做什么

命令行不是“黑客专用界面”,也不是需要背诵的魔法。它只是另一种操作电脑的方法:图形界面靠点击,命令行靠输入准确的动作。

第一课:终端、Shell、CLI 不是同一个东西

先想象你打电话去一家大公司:

  • 终端 Terminal 是你看到的电话机和通话界面。
  • Shell 是接线员,负责听懂你输入的句子、找到程序并安排执行。
  • CLI 工具 是不同部门,例如 Git 部门、npm 部门、Cloudflare 部门。
  • 命令 Command 是你这次对部门说的具体要求。
text

 ↓ 输入文字
终端窗口
 ↓ 交给 Shell(例如 zsh)
Shell 找到 CLI 工具(例如 git)

工具执行动作并打印结果

所以:你在“终端”里输入 git status,Shell 找到 Git 这个 CLI 工具,Git 再执行“查看状态”。

为什么开发者喜欢 CLI

假设要给 100 张图片改名:鼠标可能要点几百次,命令可以准确描述一次批量操作。它还容易保存、复制和自动化,因此 Git、npm、Wrangler、Claude Code、Codex 等工具都会提供 CLI。

第二课:先认识命令提示符

打开终端后,常会看到类似:

text
zhanghanyue@Mac vibecoderstudy %

它不是报错,也不是要你完整复制的命令。可以大概读成:

  • zhanghanyue@Mac:现在是谁、在哪台电脑上。
  • vibecoderstudy:目前所在的文件夹。
  • %:Shell 在说“我准备好了,请输入下一条命令”。

教程里常写 $ npm run dev。开头的 $ 通常只是“这里是一条终端命令”的提示,不要把 $ 一起输入。

第三课:把一条命令拆开读

bash
npm run build

不要把它看成一整串咒语,从左往右拆:

text
npm    run    build
 ①      ②       ③

① 找 npm 这个工具
② 让 npm 执行一个 script
③ script 的名字叫 build

再看一条:

bash
git commit -m "补充 AI 课程"
text
git       找 Git 工具
commit    创建一次版本记录
-m        后面要提供这次记录的说明
"..."     具体说明;引号把带空格的文字包成一个整体

命令通常由四种零件组成:

零件作用例子
程序名找谁办事gitnpmpython
子命令要它做什么statusruninstall
选项调整做事方式--help-m--version
参数这次处理谁或什么文件名、分支名、项目名

第四课:目录就是你现在站的位置

很多命令报错,不是命令本身错,而是你站错了文件夹。

把电脑想成一栋楼:文件夹是房间,终端里的命令只会先看你当前房间里的东西。

bash
pwd

pwd 会告诉你“我现在站在哪里”。

bash
ls

ls 会列出当前房间里的文件。

bash
cd vibe-coder-handbook

cd 是换房间。后面写你要进入的文件夹。

bash
cd ..

.. 表示上一级,所以这句是“回到外面一层”。

第五课:你日常会遇到的 CLI

只查看,不修改

命令人话风险
pwd我在哪个文件夹只读
ls这里有什么只读
git status哪些文件变了只读
git diff具体改了哪几行只读
node --versionNode 是什么版本只读

会改变项目

命令人话会改变什么
npm install按说明书安装依赖node_modules、锁文件
git add 文件名把改动放进待保存区Git 暂存区
git commit -m "说明"创建一个版本存档本地 Git 历史
git push把本地存档上传远程仓库
wrangler pages deploy ...把构建产物发布线上站点

npm、npx、pnpm、pip 别混在一起

  • npm:安装和管理 JavaScript 包,也运行 package.json 里的脚本。
  • npx:找到并临时运行一个 npm 包提供的命令。
  • pnpm:另一个 JavaScript 包管理器,目标类似,但安装方式不同。
  • pip:Python 世界常用的包安装工具,不负责 JavaScript 包。

项目已经使用哪一个包管理器,就优先继续用哪一个,不要随手混用。

第六课:第一次安全实操

这一组命令只读取信息,不会改文件。

  1. 打开 Mac 的“终端”应用,或 VS Code 菜单里的 Terminal。
  2. 输入 pwd,按回车。你会看到一条文件夹路径。
  3. 输入 ls,按回车。你会看到这个文件夹里的内容。
  4. 如果你已经在项目文件夹,输入 git status
  5. 找到最后一行新的提示符。它表示上一条命令已经结束,可以继续输入。

真实输出怎么读

text
On branch main
nothing to commit, working tree clean

人话:你现在在 main 分支;没有还没保存进 Git 的改动。

text
modified: docs/index.md

人话:docs/index.md 被改过,但还没有形成新的 commit。这不是报错,只是状态报告。

第七课:报错不要从最后一百行开始看

command not found

text
zsh: command not found: wrangler

人话:Shell 找不到名为 wrangler 的工具。可能没有安装,也可能它不在 Shell 能找到的位置。

No such file or directory

人话:你给的路径不存在。先运行 pwdls,确认是否站错目录、文件名是否拼错。

permission denied

人话:找到了目标,但当前身份没有执行或访问权限。不要一看到它就随便加 sudo;先弄清楚到底要访问什么。

构建失败

如果屏幕出现很多红字:

  1. 往上找到第一条真正的 Error
  2. 找文件名和行号,例如 config.ts:42
  3. 先读错误附近 5–10 行,不要被后面的连锁错误吓到。
  4. 把“命令、第一条错误、文件和行号、你刚做了什么”一起交给 AI。

第八课:哪些命令必须先停一下

看到下面这些含义时,不要盲目复制:

  • 递归删除整个目录;
  • 覆盖或格式化磁盘;
  • sudo 的陌生命令;
  • 从陌生网址下载内容后立刻交给 Shell 执行;
  • 输出 .env、Token、Cookie 或 SSH 私钥;
  • 直接部署、发消息、改数据库等会影响外部系统的命令。

安全提问方式:“请先逐段解释这条命令会读取什么、修改什么、上传什么,不要执行。”

学完测试

在 npm run build 里,build 是一个独立安装的软件吗?

答案:通常不是。npm 是工具,run 是动作,build 是当前项目 package.json 里定义的一段脚本名字。

终端提示 No such file or directory 时,第一步可以做什么?

答案:先用 pwd 确认当前目录,再用 ls 看目标是否真的在这里;很多时候只是站错文件夹或路径拼错。

写给想驾驭 AI,而不只是依赖 AI 的 Vibe Coder。