为什么突然想写这样一篇文章呢? 其实是因为在最近计划发布的一篇关于 WSL (Windows Subsystem for Linux) 的博文中, 我打算对终端模拟器, Shell 的选择与配置进行一些说明. 不过对于刚接触 Linux 或者刚接触命令行界面的同学, 可能会有些难以理解它们之间的区别(事实上我当初也是这样).
虽然这个话题已是老生常谈, 搜索一下应该也能找到大把的相关文章. 不过难得提到了这方面, 就趁此机会把我的理解写下来, 一来看看我是不是真正理解了, 二来看看我能不能把它们之间的区别讲得更加简明易懂.
0. 太长不看 TL;DR
命令行界面 (CLI) = 使用文本命令进行交互的用户界面
终端 (Terminal) = TTY = 文本输入 / 输出环境
控制台 (Console) = 一种特殊的终端
Shell = 命令行解释器, 执行用户输入的命令并返回结果
1. 什么是命令行界面?
命令行界面, 通俗来讲, 就是你看过的那种满屏幕都是字符的界面.
命令行界面 (英语: Command-line Interface, 缩写: CLI) 是在图形用户界面得到普及之前使用最为广泛的用户界面, 它通常不支持鼠标, 用户通过键盘输入指令, 计算机接收到指令后, 予以执行.
-- 摘自 Wikipedia https://zh.wikipedia.org/wiki/命令行界面
相信大家对于影视作品中出现的那种, 某黑客 / 程序员 / 安全专家坐在电脑前猛敲键盘, 屏幕上放眼望去全是滚动的字符的场景不会感到陌生. 这种靠一行行命令的输入输出进行交互的用户界面, 就叫做命令行界面.
电影黑客帝国剧照
在图形用户界面 (GUI) 已经完全普及的今天, 普通用户在日常使用电脑的过程中几乎不用手动输入任何命令, 大部分操作都是点点鼠标就能完成, 而熟练使用命令行操作似乎已经成为高逼格的代名词.
但事实上, 现在依然有着很多的软件开发者, 系统管理员, 或者是高级用户在使用命令行界面操作计算机. 其中很大一个原因, 就是效率: 在熟记命令的前提下, 使用命令行界面往往要比使用图形用户界面来得快.
举个栗子, 我要把当前目录下的 (包括嵌套的子目录) 所有 *.tpl 文件的后缀名修改为 *.blade.php, 如果不使用命令行, 该怎么做? 手动修改肯定不至于, 但也得去网上找找相关软件, 得要注意下载来源是否靠谱(像我这样有点洁癖的选手还得去找绿色版), 下载后还要手动指定文件路径, 重命名模板......
而使用命令行的话(这里以 Ubuntu 上的 Bash 为例), 只需运行这么一句:
rename 's/\.tpl$/\.blade.php/' ./**/*.tpl
命令行操作的高效率等优点, 也是现在许多图形化的计算机系统依然没有放弃提供命令行操作方式的原因. 就连 Windows 都有自带 cmd.exe 和 PowerShell 等命令行程序(事实上你在搜索批量重命名时, 可以看到很多方案都是通过Windows 命令提示符实现的).
2. 终端 -- 人与机器交互的接口
终端 (Terminal), 其词汇本身的意义为终点站; 末端;(电路)的端子, 线接头. 而在计算机领域, 终端则是一种用来让用户输入数据至计算机, 以及显示其计算结果的机器.
也就是说, 终端只是一种用于与计算机进行交互的输入输出设备, 其本身并不提供运算处理功能.
想要充分理解终端, 我们得回溯历史, 去看看终端的起源.
2.1 历史上的终端
在大型机 (Mainframe) 和小型机 (Minicomputer) 的时代里, 计算机曾经非常昂贵且巨大, 不像现在这样人手一台. 这些笨重的计算机通常被安置在单独的房间内, 而操作计算机的人们坐在另外的房间里, 通过某些设备与计算机进行交互. 这种设备就叫做 终端 (Terminal), 也叫终端机.
- GNU/Linux:gnome-terminal,Konsole;
- macOS:Terminal.app,iTerm2;
- What is the exact difference between a 'terminal', a 'shell', a 'tty' and a 'console'? https://unix.stackexchange.com/questions/4126/what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con
- Why is a virtual terminal "virtual", and what/why/where is the "real" terminal? https://askubuntu.com/questions/14284/why-is-a-virtual-terminal-virtual-and-what-why-where-is-the-real-terminal
- Terminal emulator - Wikipedia https://en.wikipedia.org/wiki/Terminal_emulator
- console(4): console terminal/virtual consoles - Linux man page https://linux.die.net/man/4/console
来源: https://segmentfault.com/a/1190000016129862