命令行演示教程:10 分钟从图形界面走向键盘自由
面向零基础初学者的命令行实操教程,10 分钟从打开终端开始,讲解 Shell、Terminal、PATH 核心概念,演示文件系统操作、管道重定向与文本处理,并编写 Shell 脚本完成日志分析报告生成器。
视频讲解
命令行演示教程:10 分钟从图形界面走向键盘自由
面向零基础初学者的实操演示脚本 平台:YouTube|时长:10 分钟|系统:macOS(zsh)/ Linux(bash)/ Windows WSL
开场 Hook(0:00 – 0:20)
【画面】 黑底白字大字标题"命令行 — 10 分钟丢掉鼠标",配合机械键盘敲击声。镜头切到一台 macOS 桌面,Terminal 已经摆在屏幕中央,光标稳稳闪烁。
【旁白】 命令行(CLI)是你和操作系统直接对话的通道。图形界面在中间加了一层翻译,把你的点击变成系统调用;命令行去掉了这层翻译。
500 张照片批量改尺寸,图形界面要 1 小时,命令行 30 秒出结果。这就是效率差 100 倍的来源。
它的弱点只有一个:学习曲线不像 Finder 那么直观。优点是任何图形界面能做的事,命令行都能做——而且更快、更可复现、更适合远程服务器。
今天 10 分钟,我从打开终端开始,带你一路走到写自己的第一个自动化脚本。
第一章 — 什么是命令行(0:20 – 1:00)
Chapter Intro
【旁白】 我们先搞清楚三个东西:Shell 是大脑,负责解释你的命令;Terminal 是窗口,你输入命令的地方;PATH 是地址簿,告诉 Shell 去哪里找程序。
macOS 默认是 zsh,Linux 默认是 bash,今天演示都用 zsh。你看到的一切在 bash 里几乎一样。
Demo 1.1 — 你的第一个命令
【画面】 终端全屏,标题栏写着 "zsh — 80×24",光标在 $ 后闪烁。
【命令】
echo "Hello, CLI!"
echo $SHELL
echo $PATH
【输出】
Hello, CLI!
/bin/zsh
/usr/local/bin:/usr/bin:/bin:/Users/jason/.local/bin
【旁白】
第一行 echo 是最朴素的"打印",你说啥它回啥。第二行 $SHELL 告诉你正在用的 Shell。第三行 $PATH 是冒号分隔的目录列表——你以后装的所有命令行工具,Shell 都会按这个顺序去找。
Key Takeaway:Shell 不是操作系统,它只是一个普通的解释器程序。
Practical Use Case:写脚本部署服务时,$PATH 决定你的工具能不能被调用。
Transition:理解了这些抽象概念,下面我们马上在文件系统里走一圈——这是命令行的基本功。
第二章 — 文件系统操作(1:00 – 3:30)
Chapter Intro
【旁白】 服务器上没有 Finder,只有闪烁的光标。你必须用命令"看见"文件系统。这一章我们要搞定导航、创建、复制、移动、删除。
记住三个符号:~ 是家目录,.. 是上一级,. 是当前。这三个符号就是文件系统导航的基石。
Demo 2.1 — 创建演示目录并导航
【画面】 终端高亮显示,分屏显示终端和 Finder(Finder 同步显示新建的目录)。
【命令】
cd ~/Desktop && mkdir -p cli-demo/project/{src,tests,docs}
cd cli-demo/project && pwd && ls
【输出】
/Users/jason/Desktop/cli-demo/project
docs src tests
【旁白】
-p 参数让 mkdir 一次创建多层目录,{} 展开是 Shell 的语法糖——一行代替三行。Finder 那边的窗口立刻同步出现三个文件夹,这就是"和系统直接对话"的感觉。
Demo 2.2 — 写入文件、批量创建
【画面】 终端窗口,光标快速跳动,按 Tab 键自动补全路径时有提示音。
【命令】
echo "Hello CLI" > src/main.js
touch src/{utils,config,api}.js
ls src/
【输出】
api.js config.js main.js utils.js
【旁白】
> 是覆盖写入,>> 是追加。花括号展开让我们一次创建多个文件。ls 把当前目录列出来。注意 Tab 键自动补全——打 src/ 后按 Tab,光标自动填下一个文件名,几乎不用手打完整路径。
Demo 2.3 — 批量重命名 + 查找大文件
【画面】 终端里先 cd 进一个装着几十个 .jpeg 文件的目录。
【命令】
cd ~/Pictures/vacation
ls *.jpeg
for f in *.jpeg; do mv "$f" "${f%.jpeg}.jpg"; done
ls *.jpg | head -5
find . -name "*.jpg" -size +5M
【输出】
DSC_001.jpeg DSC_002.jpeg DSC_003.jpeg ...
DSC_001.jpg DSC_002.jpg DSC_003.jpg ...
./beach.jpg
./sunset.jpg
【旁白】
一个 for 循环,把所有 .jpeg 改成 .jpg。${f%.jpeg} 的意思是"把 f 末尾的 .jpeg 去掉"。find 按大小筛选文件——这是图形界面几乎做不了的事。
Key Takeaway:pwd / cd / ls / mkdir / touch / cp / mv / rm 是文件操作八件套。
Practical Use Case:清理下载文件夹、按日期归档照片、批量改后缀,命令行几秒搞定。
Transition:单条命令强还不够——下面我们把命令"串"起来,做出图形界面根本做不到的事。
第三章 — 管道、重定向与文本处理(3:30 – 6:30)
Chapter Intro
【旁白】 Unix 哲学一句话:每个程序只做一件事,但用管道把它们连起来可以做出任何事。
| 是管道,把上一个命令的输出传给下一个;> 是覆盖写文件,>> 是追加;< 是从文件读输入。掌握这四个符号,你就能用几十个小工具组合出无穷能力。
Demo 3.1 — 用 echo + 重定向造一个迷你数据集
【画面】 终端窗口。
【命令】
cd ~/Desktop/cli-demo/project
cat <<'EOF' > access.log
2024-01-01 10.0.0.1 200
2024-01-01 10.0.0.2 404
2024-01-01 10.0.0.1 200
2024-01-01 10.0.0.3 500
2024-01-01 10.0.0.1 200
2024-01-01 10.0.0.4 404
EOF
cat access.log
【输出】
2024-01-01 10.0.0.1 200
2024-01-01 10.0.0.2 404
2024-01-01 10.0.0.1 200
2024-01-01 10.0.0.3 500
2024-01-01 10.0.0.1 200
2024-01-01 10.0.0.4 404
【旁白】
cat <<'EOF' 是 here-doc 语法:从 EOF 到下一个 EOF 之间的所有行原样写入文件。我们拿它造一个迷你日志,下面就要分析它。
Demo 3.2 — 一行管道找出访问最多的 IP
【画面】 终端里逐段敲命令,输出即时刷新。屏幕上用彩色高亮显示出 3 10.0.0.1。
【命令】
awk '{print $2}' access.log \
| sort \
| uniq -c \
| sort -rn \
| head -3
【输出】
3 10.0.0.1
2 10.0.0.2
1 10.0.0.3
【旁白】
一个五行管道:awk 抽第二列(IP),sort 排序,uniq -c 数连续重复的次数,sort -rn 按数字倒排,head -3 取前三。结果一目了然——真实服务器上 10GB 日志用这一招,几秒钟就出。
Demo 3.3 — grep + tee + 实时监控
【画面】 终端分两行,第二行用红色高亮显示 "ERROR"。
【命令】
grep "404" access.log > errors.log
cat errors.log
echo "404 总数: $(grep -c 404 access.log)"
grep "404" access.log | tee live-errors.txt | wc -l
【输出】
2024-01-01 10.0.0.2 404
2024-01-01 10.0.0.4 404
404 总数: 2
2
【旁白】
> 把结果写文件,tee 同时把结果输出到屏幕和文件——调试时非常有用。$() 是命令替换,把命令的输出当成值嵌入另一条命令。在生产环境,这套组合配上 tail -f 就能实时监控日志错误。
Key Takeaway:管道是把简单工具组装成复杂能力的"胶水"。 Practical Use Case:日志分析、CSV 处理、批量查找替换——任何文本密集型工作。 Transition:单次管道再强,每次手动敲也烦——下面我们把它写进脚本,让计算机替你执行。
第四章 — Shell 脚本与效率提升(6:30 – 8:50)
Chapter Intro
【旁白】
Shell 脚本就是把若干条命令写进一个 .sh 文件,一条 ./script.sh 代替十次手动操作。它是真正的编程语言——有变量、循环、函数——而且脚本里可以直接写所有命令行命令,没有任何 import。
有两个安全开关是生产级脚本必备的:set -e 任何命令失败就停下,set -u 拼错变量名立刻报错。
Demo 4.1 — 第一个脚本:批量清理临时文件
【画面】 终端里用 nano 或 vim 写脚本(演示用 cat + here-doc 直接创建),保存后 chmod +x 加执行权限。
【命令】
cat > cleanup.sh <<'EOF'
#!/bin/bash
set -euo pipefail
TARGET_DIR="${1:-$HOME/Downloads}"
DAYS="${2:-7}"
echo "==> 清理 $TARGET_DIR 中超过 $DAYS 天的临时文件..."
find "$TARGET_DIR" -type f \( -name "*.tmp" -o -name "*.log" \) -mtime +$DAYS -print -delete
echo "✓ 完成"
EOF
chmod +x cleanup.sh
./cleanup.sh ~/Desktop/cli-demo 0
【输出】
==> 清理 /Users/jason/Desktop/cli-demo 中超过 0 天的临时文件...
/Users/jason/Desktop/cli-demo/errors.log
/Users/jason/Desktop/cli-demo/live-errors.txt
✓ 完成
【旁白】
看,30 行不到的脚本解决了一个真实问题。${1:-...} 是参数默认值写法:第一个参数传进来就用,没传就用 Downloads。find -delete 直接删符合条件的文件。set -euo pipefail 是三件套——e 失败退出、u 引用未定义变量报错、pipefail 让管道里任何一个命令失败都算整体失败。
Demo 4.2 — alias 让常用命令更短
【画面】 终端里直接 alias 后立刻演示,再展示 ~/.zshrc 末尾几行。
【命令】
alias ll='ls -lah'
alias gs='git status'
ll
echo 'alias ll="ls -lah"' >> ~/.zshrc
【输出】
total 8
drwxr-xr-x 6 jason staff 192B Jul 6 14:02 .
drwxr-xr-x@ 4 jason staff 128B Jul 6 14:01 ..
-rwxr-xr-x 1 jason staff 312B Jul 6 14:02 cleanup.sh
drwxr-xr-x 5 jason staff 160B Jul 6 14:01 project
【旁白】
alias 把长命令缩写。直接写在终端里只对当前会话有效,追加到 ~/.zshrc 才永久生效。新开终端会自动加载——这就是为什么很多开发者一打开就有一堆自定义快捷键。
Key Takeaway:脚本把零散命令封装成可复用、可分享的自动化工具。 Practical Use Case:部署脚本、备份脚本、数据迁移脚本——CI/CD 的根基。 Transition:单章知识都讲完了——下面我们做个小项目,把它们全部串起来。
终极实战项目 — 一键日志分析报告生成器(8:50 – 9:40)
Chapter Intro
【旁白】 我们写一个真实场景的脚本:给定一个日志文件,输出访问量 Top 5 IP、错误状态码统计、报告保存到文件。这一段你会看到 Shell 脚本 + 管道 + 重定向 + 文本处理全部串起来。
Demo 5.1 — 编写并运行 report.sh
【画面】 终端里逐行敲脚本,每写一段运行一次看效果。
【命令】
cd ~/Desktop/cli-demo/project
cat > report.sh <<'EOF'
#!/bin/bash
set -euo pipefail
LOG="${1:-access.log}"
OUT="report-$(date +%Y%m%d-%H%M%S).txt"
echo "==> 分析 $LOG ..." | tee "$OUT"
echo "" | tee -a "$OUT"
echo "[Top 5 IPs]" | tee -a "$OUT"
awk '{print $2}' "$LOG" | sort | uniq -c | sort -rn | head -5 | tee -a "$OUT"
echo "" | tee -a "$OUT"
echo "[Status Code 分布]" | tee -a "$OUT"
awk '{print $3}' "$LOG" | sort | uniq -c | sort -rn | tee -a "$OUT"
echo "" | tee -a "$OUT"
echo "✓ 报告已保存到 $OUT"
EOF
chmod +x report.sh
./report.sh access.log
cat report-*.txt | head -20
【输出】
==> 分析 access.log ...
[Top 5 IPs]
3 10.0.0.1
2 10.0.0.2
1 10.0.0.3
1 10.0.0.4
[Status Code 分布]
3 200
2 404
1 500
✓ 报告已保存到 report-20240706-140230.txt
【旁白】
这就是命令行的力量:30 行不到的脚本,输入"日志文件路径",输出"分析报告"。所有学过的知识点——参数默认值、tee 同时输出到屏幕和文件、管道组合命令、sort -rn 倒序排序——全部串起来了。在真实环境里,把 access.log 换成几百 MB 的生产日志,这脚本一样秒级出结果。
课程收尾(9:40 – 10:00)
【画面】 终端窗口停在刚才的输出上,旁边浮现本课知识图谱:Shell → PATH → 文件操作 → 管道 → 脚本。
【旁白】 10 分钟,我们走完了命令行学习的核心闭环。你现在能:
- 在任何服务器上自如导航文件系统
- 用管道和重定向分析 GB 级别的日志
- 写生产级 Shell 脚本,把重复工作自动化
下一步建议两条路:一是深入 grep / sed / awk 三大文本处理神器;二是直接跳到 DevOps 工具链——ssh、scp、systemctl、docker。命令行能力一旦建立,能用一辈子。
我们下次见。
实践示例
echo "Hello, CLI!"
mkdir -p cli-demo/project/{src,tests,docs}
awk '{print $2}' access.log | sort | uniq -c | sort -rn | head -3
cat > cleanup.sh <<'EOF' ... EOF
./report.sh access.log
后续与前置知识
- Git 基础教程:10 分钟从零开始掌握版本控制前置
面向零基础初学者的 Git 实操教程,10 分钟演示 init、add、commit、push、pull 等核心命令,覆盖身份配置、仓库初始化、暂存与提交、历史查看、分支合并、冲突解决、远程 GitHub 推送与克隆及最佳实践。
- GitHub 演示教程:从零跑通协作全流程前置
10 分钟带你完成一次完整的 GitHub 协作闭环:仓库创建、分支与 PR、Issue 追踪、Actions 自动测试,覆盖 GitHub Flow、Pull Request 审查、Issues 任务管理以及 GitHub Actions 自动化 CI/CD。
- Node.js 演示教程:从“这东西跟我有关系?”到写完一个全栈应用前置
10 分钟 Node.js 实操教程,从识别电脑上已存在的 Node.js 开始,对比 npm 与 pnpm 的安装速度差异,使用内置 http 模块在 30 秒内启动一个 Web 服务器,再进阶用 pnpm + Express 在 60 行内完成一个支持增删改查的 Todo API,并演示 --watch、EADDRINUSE 报错处理以及 async/await 异步写法三个新手常见坑。
- Python 基础教程 · 10 分钟上手实操课前置
面向零基础初学者的 Python 实操教程,10 分钟从安装运行开始,讲解变量与数据结构、函数与模块、文件 I/O 与异常处理,最后实战完成 CSV 数据分析小工具。
- Docker 演示教程:一次打包,到处运行后续
面向初学者的 Docker 实操教程,10 分钟演示镜像与容器概念、Dockerfile 构建、Docker Compose 多服务编排、常用排错命令,并通过 Node.js + nginx + PostgreSQL 博客项目实战完成容器化部署。
- IDE 演示教程:从毛坯房到编程超能力相关
面向初学者的 IDE 实操教程,10分钟演示 VS Code 从默认配置到高效开发环境的调教,涵盖 IDE 核心概念(智能补全与语言服务器)、按语言选择 IDE 与安装扩展、个性化 settings.json 配置、安装 GitLens 与 GitHub Copilot 等实用插件,以及团队级 .vscode 配置实战,实现效率提升。
引用此知识点
- FastAPI 接口开发 演示教程:从 Hello World 到一个完整 CRUD API前置
本文通过十个演示和最终实战,使用 FastAPI 官方教程风格,从三行代码的 Hello World 开始,逐步讲解路径参数、查询参数、请求体、Pydantic 校验、自动文档、异常处理、枚举类型、PUT/DELETE,并最终实现一个基于内存字典的完整 CRUD API,全程使用 TestClient 测试,无需启动服务器。
- HTTP 请求库 Requests 演示教程:从一次 GET 到稳健的下载客户端前置
本文通过 httpbin.org 实操演示 Python requests 库的 GET、POST、PUT、查询参数、请求头、状态码与异常、超时、会话 Session 和 HTTP 基本认证,最后编写一个带会话与超时的稳健客户端下载 pandas 官方泰坦尼克数据集。
- 文档数据库入门:MongoDB 与 Couchbase前置
本教程系统讲解文档数据库核心概念,以 MongoDB 和 Couchbase 为代表,涵盖数据模型、CRUD 操作、查询与聚合、索引、副本集、分片、事务、多模型能力、选型对比及 Python 接入方法,帮助建立文档数据库全景认知。
- 键值数据库入门:Redis 与 DynamoDB相关
本教程系统讲解键值数据库核心概念,以 Redis 和 DynamoDB 为代表,对比内存与云托管两种形态,涵盖 Redis 五种数据结构、过期持久化高可用、经典场景,DynamoDB 数据模型、主键设计、CRUD、二级索引、容量一致性、单表设计,并通过 Python 示例连接两者,最后给出选型建议与练习。
- 搜索数据库入门:Elasticsearch 与 OpenSearch前置
本教程系统讲解搜索数据库核心概念,以 Elasticsearch 与 OpenSearch 为代表,涵盖倒排索引、集群与索引/分片/副本数据模型、REST API 全文搜索、分词与 BM25 相关性排序、聚合分析、两者对比及 Python 接入方法,帮助建立搜索数据库全景认知。
- 时序数据库入门:InfluxDB 与 TimescaleDB相关
本文系统讲解时序数据库核心概念,以 InfluxDB 和 TimescaleDB 为代表,涵盖数据模型、Line Protocol 与 Flux/InfluxQL 查询、保留策略与降采样、超表与连续聚合/压缩、两者对比及 Python 接入方法,帮助建立时序数据库全景认知。