名词解释教学工作区 · 课程 0001 · 形态 对比组 · 约 6 分钟 · 前置:无 · 相关:0002 · 编辑器 / 编译器 / 解释器 / IDE · 0011 · tmux · 2026-10-01
CLI、TUI、GUI:你和电脑说话的三条通道
你能做到: 拿到一款软件,指出它这次给你的是哪条通道 —— 一次敲完一条命令、用键盘在字符画的面板里翻,
还是用鼠标点窗口;并说出这条通道换来了什么、代价又是什么。
1 | 定义
三个词说的是同一件事的三种做法:你把意图怎么送进电脑、电脑把状态怎么回给你 。判据只有两条 —— 屏幕上画的是字符还是像素,以及你是一次敲完命令、在选项间移动,还是用指针点。
① CLI (Command Line Interface ,命令行界面)
只以文本行收发的界面:你把一条完整命令敲完再回车,程序执行后把结果当作文本打回屏幕;界面本身既不画面板,也不画窗口。
像对着话筒念指令:一句话说完整它才动,念错一个字得整句重来;好处是这句话能原样记下来,交给别人照着念。
② TUI (Terminal User Interface ,终端用户界面)
在终端里用字符画出边框、列表、进度条与选中高亮,让你用键盘(有时也能用鼠标)在选项间移动的界面;画面由字符拼成,不依赖图形环境。
像在终端里用键盘翻菜单:整块屏幕是一张字符拼的表格,方向键上下选、回车确认,看着像图形界面,其实一个像素也没画。
③ GUI (Graphical User Interface ,图形用户界面)
由窗口、图标、按钮这些控件组成的界面:程序借窗口系统把像素画到屏幕上,你用指针点选、拖拽来操作。
像在桌面上点图标、拖窗口:能看到的都摆在眼前,想用哪个点一下,不用记命令,也不用背选项。
2 | 它们解决什么麻烦
三个词解决的是同一件事:人得把意图说清楚,机器得把状态讲明白 。区别在于用哪套材料来做 —— 文本行、字符画的面板,还是像素画的窗口。
① 重复的活要能复现。 每个动作都绑在一次点击上,就没法批量、没法留痕、没法交给脚本 —— 这是 CLI 要管的:操作写成一行字,就能复制、能排队、能存进脚本下个月照跑。
② 纯文本回显看不见状态。 进度走到哪、列表里当前选中哪一项、内存还剩多少,一行行文本刷过去看不出来 —— 这是 TUI 要管的:用字符把面板画出来,状态摆在眼前。
③ 多数人不想背命令。 知道要做什么,却得先背下几十个命令名和选项,这是普通人上手最大的障碍 —— 这是 GUI 要管的:把功能摆进菜单,让指针去点。
三者不是三个时代,而是三套材料:文本行 、字符网格 (character grid,把屏幕当成等宽字符排成的方格)、像素窗口 。同一款软件常常同时给出好几条。
3 | 特征矩阵
每一列都是一眼能看出来、能当场问出来的事。把软件叫过来逐列问,整行对得上的就是它。
名词 靠什么输入 画面是怎么画的 要不要图形环境 能不能脚本化 远程低带宽下好不好用 典型例子
CLI
一次敲完一条完整命令
只有一行行文本,没有面板
不要
最容易,输出能直接接给下一条命令
好用:只传字符,连接再差也撑得住
ls、git、ssh
TUI
键盘在选项间移动,部分支持鼠标
用字符拼出边框、列表和进度条
不要,有个终端就够
较难,主要靠快捷键和批量模式
好用:传的还是字符,不吃带宽
top、htop、vim
GUI
指针点选、拖拽
用像素画出窗口、按钮和滚动条
要,得先有窗口系统
难,动作都绑在点击上
差:画面要一帧帧传过去
浏览器、Photoshop、文件管理器
横着读一遍就够:「画面是怎么画的」这一列是三个词最容易混的地方 ,右边的「远程」一列帮你复核 —— 传字符的都不怕网络差,传像素的才怕。「能不能脚本化」那一列解释的是另一个常被问到的问题:为什么自动化最后都落到命令行上。
4 | 各自怎么做
① CLI 靠「输出还是文本」。 上一条命令打出的文本能直接当下一条的输入,于是有了管道 | 和重定向 > —— ls -l | grep log 只留下含 log 的行,journalctl -u nginx > nginx.log 把日志存成文件。学一条命令靠它自带的说明:ls --help 看选项速览,man ls 看完整手册。
② TUI 用字符在终端里画出界面。 终端本身是一张 字符网格 ,位置按行列计;全屏程序会切到备用屏幕、接管按键,再自己画边框、状态行和进度条。看进程的 top、htop,编辑文本的 vim,以及负责「关掉窗口活还继续」的 tmux ,走的都是这条。那片负责显示、把字符画出来的窗口程序叫终端模拟器 (terminal emulator)——它只传字符、不传画面,所以远程登录里照跑。
③ GUI 靠窗口系统和事件循环。 程序把按钮、菜单当控件交出去,由窗口系统 (window system)把像素画到屏幕上、把指针的动作回报回来;Linux 上这一层是 X11 与 Wayland (见那节课),macOS 与 Windows 各有自己的一套。程序收到点击和按键,就转进事件循环 (event loop),按事件决定做什么。
④ 三条通道常常同时开着。 在终端里敲一条命令就能启动图形程序;图形界面里也总有一个终端窗口能跑 CLI。同一款软件既给菜单、也给一个命令行工具的例子,就是 IDE :界面是 GUI,底下叫来的编译器与解释器都从命令行来。
5 | 各自的代价
① CLI:门槛高、状态看不见。 学习曲线陡 —— 不先知道命令叫什么、选项怎么拼,就无从下手,--help 也只在你已经知道这个命令名之后才帮得上忙;一次只回一段文本,进度、当前选中项这类状态刷过去就没了。
② TUI:表达力被字符网格框住。 画不出一像素宽的线,做不了精细排版,多窗口并排对照也难;鼠标支持弱,各家终端上报鼠标的方式还不一致;全屏接管之后,复制粘贴和把日志留下来都变得别扭。
③ GUI:依赖图形栈,难脚本化。 要先有窗口系统、显卡驱动和一整套桌面环境,内存与启动时间都跟着涨,服务器上装桌面更是负担;动作绑在点击上,批量只能靠宏或另找接口;远程用起来代价最高 —— 得把画面一帧帧编码传过去,网络一差就卡。
6 | 区分使用场景
手头这件事,按下面四条挑就行:
① 同一件事要做几十遍、还要能复现 → CLI。 把操作写成一行命令或一段脚本,交给计划任务,或者交给持续集成 CI 在每次提交后自动跑。
② 在服务器上要「看得见」状态,又没有图形环境 → TUI。 用 htop 看进程和内存、上下翻、按键换个排序,比一条条命令问过去直观得多;想让它活得比连接久,就交给 tmux 。
③ 日常办公、图像处理、要精细排版 → GUI。 裁剪照片、并排对照十几个窗口、用鼠标拖着调版式,字符界面里做不了。
④ 只连了一根细线、带宽紧张 → CLI 或 TUI。 远程维护服务器时别开远程桌面,把界面收成只传字符的那两条;家里那台常年开着的树莓派 更是插上电就跑、不接屏幕,全靠 ssh 敲命令行。
判断口径只有两问:屏幕上画的是什么 (字符流、字符面板,还是像素),你怎么操作 (整条命令、选项间移动,还是指针点选)。两问指向同一个答案,再下结论。界面顺不顺手是另一本账,那要拿人来量(UI 与 UX )。
7 | 常见误解
① 「CLI 是过时的东西。」 命令行是唯一天生可复制、可远程、可脚本化的一条:服务器上没有它,自动化和排障都无从下手;而且图形界面里照样能开一个终端跑它。
② 「TUI 就是 CLI。」 TUI 借用的是同一个终端,但界面是画出来的:有边框、列表和选中高亮,键盘在选项间走,不必把整条命令背全。判据落在画面上,不落在窗口上。
③ 「服务器不能有 GUI。」 技术上装得上图形环境和远程桌面,只是代价高:带宽要传画面、内存要养桌面、驱动还得配齐;服务器默认只给命令行,是取舍,不是限制。
8 | 练习
三个场景,每题只在四个词里选一个;选完立刻看到这笔账记在哪一节。
1. 同一件事要在几十台机器上重复做,还想把这次操作原样存下来,下个月照着再跑一遍。
GUI 用像素画窗口,指针点选
TUI 在终端里用字符画出面板和列表
终端模拟器 负责把字符画到屏幕上的那个窗口程序
CLI 一次敲完一条命令,结果以文本回来
对。要复现、要批量,就得让操作变成可复制的一行文字 —— 这正是 CLI 的长处;交给计划任务或持续集成,下个月照着再跑一遍即可。TUI 存不下整套动作,GUI 的动作绑在点击上,终端模拟器只负责显示。
2. 连上一台没有图形环境的服务器,想一眼看到各进程占了多少内存,还能上下翻、按键换个排序。
CLI 一次敲完一条命令,结果以文本回来
终端模拟器 负责把字符画到屏幕上的那个窗口程序
TUI 在终端里用字符画出面板和列表
GUI 用像素画窗口,指针点选
对。要看的是状态而不是一段文本,又没有图形环境 —— 用字符画出面板、键盘在选项间走,正好落在 TUI 上(第 4 节第 ② 条);只传字符,所以细线连接也撑得住。
3. 要裁剪照片、把十几个窗口并排对照,还要用鼠标拖着调版式。
CLI 一次敲完一条命令,结果以文本回来
GUI 用像素画窗口,指针点选
TUI 在终端里用字符画出面板和列表
终端模拟器 负责把字符画到屏幕上的那个窗口程序
对。精细排版、并排对照、拖着调版式都要像素和指针,字符网格里做不了(第 5 节第 ② 条);这也是 GUI 换来方便时付的那笔账 —— 要图形环境,远程还得传画面。