在UNIX的术语中,最简单的回答是:
终端(terminal)=tty=文本的输入输出环境
控制台(console)=物理终端
shell=命令行解释器
先说简要定义,看不懂的可以直接跳到分割线处,有更通俗的解释。
tty:它是终端的统称,因为最早的外设终端是电传打字机(teletype,简称为tty)。
终端(terminal):单纯的人机交互“硬件”或者“软件(也就是终端模拟器)”。
控制台(console):一个等级更高的终端,拥有特殊权限,可以显示普通终端不能显示的系统消息。
外壳(shell):一个解释kernel(内核)命令的软件程序。
我再提一个。
内核(kernel):电脑系统最基础的“控制器”(软件)。
如果看到这里感觉听不懂也没关系,我再用通俗易懂的方式给你解释。
从前有个国王(内核-kernel),他统治着整个国家(电脑的操作系统)。
后来有一天,一个外国商人(人-电脑的使用者or用户)想来这个国家做交易。
但是当中存在个问题,就是外国商人不会这个国家的语言(计算机语言或者命令),他们都只会说自己的本国话。
所以国王叫了自己的翻译(外壳-shell)来解决这个问题。
不过又考虑到这个商人是外国人,肯定不能直接让他进自己国家来和自己当面交流啊,更何况自己可是国王,一般人都是没权利见面的。
于是国王决定让外国商人在自己国家的城外呆着,不能进来,同时给他安排了一个跑腿代话的家伙(终端-terminal)。
那外国商人就疑惑了,“那为什么我就不能直接和翻译说话呢?要那个跑腿的岂不是多此一举?”
国王回答:“因为你不配。”(开玩笑,实际上当你打开终端模拟器,它就会自动调用shell,但是为了大家理解两者的概念和区别,我这里就不把这两个东西拟变一个人了,反而专门把他们分开成两个角色。)
好了,现在外国商人说:"I want to buy an apple for 1 shell." 注意:这里是贝壳的意思昂哈哈哈,不是外壳。(用户在terminal输入命令,而且这个命令要符合规定,例如你总不能说I buy apple one use 1 shell,这样英语表达人都听不懂,所以命令也要同样,不然机器没办法做出相关回应了,就会报错吼吼吼)
跑腿的把这句话传给翻译。(terminal将接收到的命令数据输送给shell)
翻译将这句英语翻译成国王听的懂的中文。(shell将接收到的命令进行解释)
翻译将翻译好的中文转告给国王:“我要一个苹果。”(shell将解释好的命令输送给kernel)
国王听到后做出了回应:“可以,给你一个苹果,把一个贝壳放在地上。”(kernel接受命令然后开始处理,并将命令结果返还给翻译)
然后翻译把国王回应的中文翻译成英文并转告给跑腿的。(shell将接收到的命令进行解释,然后输送给terminal)
跑腿的再转告给外国商人:"Yes, I will give you an apple, please put the shell on the ground."(terminal将执行结果输出给用户,并完成了一轮人机交互)