CLI.NEWS / TUTORIAL

CLI 基础教程:从概念到实践

本教程以 CLI 的核心概念为起点,梳理其技术演进脉络与实际应用场景,并针对不同操作系统提供具体的入门路径。

什么是 CLI

CLI(Command-Line Interface)即命令行界面,是一种通过输入文本命令、参数和脚本来与操作系统或应用程序交互的方式。与图形界面(GUI)的点击操作不同,CLI 以文本输入为核心,强调精确控制与可编程性。

在深入学习之前,有必要先厘清几个容易混淆的核心术语。许多初学者的困惑往往源于对这些概念的混用。

术语通俗解释常见例子
CLI通过命令、参数、标志和脚本驱动系统或工具的文本交互方式。gitdockerkubectlaws
Terminal承载命令输入输出的窗口程序,负责显示提示符和执行结果,本身不解释命令。Windows Terminal、Terminal.app、iTerm2
Shell命令解释器,负责读取、解析并执行用户输入的命令,同时也是脚本的运行环境。Bash、Zsh、PowerShell、fish
TUI运行在终端内的文本界面应用程序,提供键盘驱动的交互体验。htoplazygitbtop
REPL读取-求值-输出循环,逐行执行代码并即时返回结果的交互模式。pythonnode
Agent CLI将大模型能力引入终端的工具,可读取代码、执行命令并编排现有工具链。Codex CLI、Claude Code、Gemini CLI

简而言之:Terminal 是窗口,Shell 是解释器,CLI 是交互方式,TUI 是终端内的应用形态。理解这四者的区别,是学习命令行的第一步。

为什么需要 CLI

图形界面适合一次性的交互操作,但当同一任务需要反复执行时,手动点击的效率会急剧下降。CLI 天然具备自动化、远程管理和工具组合的能力。随着 AI 编程助手进入终端环境,CLI 进一步成为人与 AI 协同工作的重要接口。

CLI 的核心优势主要体现在以下四个方面:

  • 自动化

    命令天然可以写入脚本,进而集成到 CI/CD 流水线和部署流程中,将手动操作转化为可复用的自动化工作流。

  • 远程管理

    服务器、容器和云实例通常不提供图形界面。通过 SSH 或远程 Shell 连接后,命令行是管理这些环境的主要手段。

  • 可组合性

    一个命令的输出可以直接作为另一个命令的输入,通过管道和重定向将多个工具串联成完整的数据处理流程。

  • AI 协作接口

    现代 AI 编程助手直接运行在终端中,能够调用现有的 CLI 工具链。CLI 已成为人与 AI Agent 共享的操作界面。

发展历程

命令行的历史与计算机本身几乎同步开始。梳理这条演进脉络,有助于理解当今终端环境中各种概念和工具的技术根源。

  • 电传打字机时代

    早期计算机没有显示器,操作者通过电传打字机(Teletype)输入指令并接收打印输出。TTY 这一术语即源于此。

    文本命令交互从计算机诞生之初即已存在,是人机交互最原始的形态。

  • Unix 与 Shell 传统

    1970 年代,Unix 系统引入了 Shell、管道、重定向和脚本等核心抽象。命令的输出可以直接作为另一命令的输入,这一设计范式沿用至今。

    当今开发者所熟悉的命令行心智模型,大部分源自这一传统。

  • 个人电脑时代

    1980 年代 MS-DOS 主导了个人电脑市场。此后虽然 Windows 和 macOS 推动了图形界面的普及,但命令行始终是专业用户的核心工具。

    GUI 与 CLI 并非替代关系,两者各有其适用领域,长期共存。

  • Linux 生态标准化

    包管理器、服务管理、SSH 等工具逐步成为 Linux 开发与运维的标准入口。绝大多数开源项目均通过命令行提供安装和使用说明。

    CLI 已从专业工具演变为开发者生态的通用语言。

  • 云原生时代

    dockerkubectl 及各云平台 CLI 成为基础设施管理的主要控制面。许多运维操作已完全通过 CLI 完成,无需访问 Web 控制台。

    学习 CLI 不再局限于本地命令,更是掌握容器、云平台与部署系统的操作方式。

  • AI Agent 时代

    大模型能力直接进入终端环境,AI Agent 可以读取代码、执行命令并编排工具链,成为开发流程中的协作角色。

    CLI 从人工操作工具进一步演进为人与 AI Agent 共享的工作界面。

如何开始使用

学习命令行的重点不在于记忆具体命令,而在于理解命令的结构:命令本体、参数、标志、输入输出流和退出码。掌握这套结构化思维后,在不同 Shell 之间切换会自然很多。

建议的学习顺序:
  1. 打开终端,确认当前使用的 Shell 类型(Bash、Zsh 或 PowerShell)。
  2. 掌握目录导航、文件查看,以及通过 --helpman 阅读帮助文档。
  3. 理解命令的基本结构:参数、标志、环境变量、标准输入输出和退出码。
  4. 将常用操作编写为脚本,并集成到 Git、Docker、云 CLI 或 AI Agent 工作流中。
$ git commit -m "init"
git -> 命令 · commit -> 子命令 · -m -> 标志 · "init" -> 参数
命令的核心组成要素:
  • 参数(Arguments) — 命令后附带的值,如文件名、目录路径或搜索关键词,用于指定操作对象。
  • 标志 / 选项(Flags) — 以 --- 开头的修饰符,如 -a--help,用于控制命令的执行行为。
  • 工作目录 — 命令默认执行的上下文路径。不同的工作目录可能导致完全不同的执行结果。
  • 标准流stdin 为标准输入,stdout 为标准输出,stderr 为标准错误。它们是命令间数据传递的基础机制。
  • 退出码 — 命令执行完成后返回的整数值:0 表示成功,非零值表示异常。脚本通常依据退出码进行条件判断。
  • 环境变量 — 如 PATHHOME 等系统级配置项,影响命令的查找路径、默认行为和运行上下文。
常用操作对照表:
操作目标POSIX shellPowerShell
查看当前目录pwdGet-Location
列出文件ls -laGet-ChildItem -Force
切换目录cd path/to/dirSet-Location path\to\dir
查看帮助man ls / tool --helpGet-Help tool
查看环境变量echo $PATH$env:Path
搜索文件内容rg pattern .Select-String pattern

应用场景

CLI 并非适用于所有任务,但在涉及自动化、远程管理、批量处理和工具编排的场景中,命令行通常具有更高的效率、稳定性和可复现性。

适合使用 CLI 的场景

  • 需要将重复操作脚本化,实现一次编写、多次复用。
  • 需要管理服务器、容器或云资源等通常不具备图形界面的环境。
  • 需要对文件、日志、代码仓库或部署流程进行批量处理。
  • 需要 AI Agent 直接调用现有 CLI 工具链协助完成开发任务。

需要谨慎考虑的场景

  • 以视觉布局和拖拽交互为主的设计类工作,如 UI 排版或视频剪辑。
  • 尚未完全理解命令含义,但操作具有较高风险(如删除生产环境数据)。
  • 问题核心在于视觉呈现和空间排布,命令行工具难以提供有效支持。

使用环境

CLI 的使用范围远不止本地计算机。从远程服务器到云平台,从容器环境到浏览器内嵌终端,命令行已经成为覆盖整个开发与运维工作流的通用接口。

  • 本地开发环境 — 学习 CLI、管理项目、运行 Git 和安装开发工具的默认起点。
  • 远程服务器 — 通过 SSH 或远程 Shell 管理服务、查看日志、修改配置和执行部署操作。
  • 容器与虚拟环境 — Docker、WSL 和虚拟机均以 CLI 作为主要交互入口,提供跨平台的一致操作体验。
  • 云平台 — AWS CLI、Azure CLI、gcloud 等工具是管理云资源、配置权限和执行自动化任务的主要控制面。
  • CI/CD 流水线 — 持续集成和部署的每个阶段本质上都是按顺序执行命令和脚本。
  • 浏览器内终端 — 越来越多的平台提供内嵌式 Web 终端,支持无需本地安装即可使用命令行。

各平台入门指南

不同操作系统的命令行入口存在差异,默认 Shell、终端应用和包管理器各不相同。下面按平台说明推荐的入门路径。

Windows / PowerShell

PowerShell + Windows Terminal + WSL

现代 Windows 的命令行环境由 PowerShell、Windows Terminal 和 WSL 三部分组成。PowerShell 提供对象管道和脚本能力,Windows Terminal 作为统一的终端宿主,WSL 则在需要时提供完整的 Linux 工具链。

  • 建议从 Get-LocationGet-ChildItemGet-Help 等基础命令开始。
  • 需要 Linux 工具链时再启用 WSL,将 Bash 与 PowerShell 按各自优势分工使用。

PowerShell · Windows Terminal · WSL

macOS / Zsh

Terminal.app + zsh

macOS 内置的 Terminal.app 默认使用 Zsh 作为 Shell。配合 Homebrew 包管理器,可以方便地安装各类开发工具。Zsh 的基本语法与 Bash 高度兼容。

  • 建议先掌握 pwdlscdmanssh 和 Homebrew。
  • 注意区分三个概念:Terminal 是终端窗口,Zsh 是 Shell 解释器,iTerm2 是第三方终端应用。

Apple Terminal

Linux / Bash

bash / POSIX shell

Linux 上几乎所有操作都可以通过命令行完成:软件安装、服务管理、权限配置和远程连接。Bash 是最常见的默认 Shell,也是绝大多数教程和文档所使用的环境。

  • 建议优先掌握路径操作、文件权限、管道、sudo 和包管理器(aptdnf 等)。
  • Ubuntu 官方提供了一篇适合初学者的命令行教程,可作为从零建立 Bash 基础的入口。

GNU Bash Manual · Ubuntu CLI

Android / Termux

Termux

Termux 是一个无需 Root 权限的 Android 终端模拟器和 Linux 环境,提供 APT 包管理能力,可安装 Git、SSH、Python 等工具。它适合移动端的命令行学习和远程服务器应急管理。

  • 建议先安装 Git、OpenSSH 和 man,然后练习远程连接。
  • 更适合作为移动端学习工具和应急运维入口,而不是桌面开发环境的完整替代。

Termux · Docs

iOS / iSH

iSH

iSH 基于用户态 x86 模拟器和 Alpine Linux,在 iOS 设备上提供轻量级 Shell 环境。性能有限,但足以满足基础命令练习、Shell 概念学习和临时 SSH 连接的需求。

  • 建议从目录导航、文本操作和 SSH 连接开始,不宜期待运行大型构建工具链。
  • 如果目标是理解 Shell 的工作原理,iSH 提供了一个低风险的实践环境。

iSH

推荐学习路径

第一阶段建议集中掌握以下核心技能:
  1. 路径、目录与文件操作:理解文件系统导航和工作目录的概念。
  2. 帮助系统:man--helpGet-Help,建立独立查文档的能力。
  3. 包管理器:brewaptdnfwinget,掌握各平台统一的软件安装机制。
  4. 远程连接:ssh,学习远程服务器访问和管理。
  5. 版本控制:git,理解现代软件开发的基础设施。
  6. 文本搜索:greprg,在代码和日志中快速定位关键信息。
  7. 脚本编写:.sh.ps1,把重复操作沉淀为可复用的自动化流程。

安全注意事项

  • 在充分理解命令含义之前,不要执行涉及 sudorm -rf、批量权限修改或数据删除的操作。
  • 为生产环境、测试环境和个人开发环境配置不同的终端提示符或配色方案,防止环境混淆。
  • 避免将 API Key、Token、私钥等敏感信息写入 Shell 历史记录或公开脚本文件。
  • 在允许 AI Agent 使用 CLI 工具之前,应先限制其可访问的目录范围和执行权限。

参考资料