← 返回知识宇宙
基础课程·入门

命令行演示教程:10 分钟从图形界面走向键盘自由

面向零基础初学者的命令行实操教程,10 分钟从打开终端开始,讲解 Shell、Terminal、PATH 核心概念,演示文件系统操作、管道重定向与文本处理,并编写 Shell 脚本完成日志分析报告生成器。

知识编号20
关系轨道6
学习难度入门
命令行CLIShell终端文件系统管道重定向文本处理脚本自动化
抖音

视频讲解

命令行演示教程: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 分钟,我们走完了命令行学习的核心闭环。你现在能:

下一步建议两条路:一是深入 grep / sed / awk 三大文本处理神器;二是直接跳到 DevOps 工具链——ssh、scp、systemctl、docker。命令行能力一旦建立,能用一辈子。

我们下次见。

实践示例

后续与前置知识

引用此知识点

更多基础课程知识