直接参考下面这张图:
在这里插入图片描述

定义

tty:teletypewriter,字面意思电传打字机。这个是早期计算机的时候再有的一个概念,比较偏向硬件,如下图1。
terminal:终端。电线末端,一个用于显示的屏幕。只要电缆足够长,可以将一台主机的信息跨越太平洋显示在你面前。如下图2.
console:控制台。也是一个偏向硬件的概念,在早期计算机里面就是一个布满按钮的面板。在现代计算机里,他其实就是一个能直接显示系统消息的终端,或者叫主终端,用于控制交互。如下图1,2。
shell:。现代程序员最熟悉不过的一种软件,能够解析执行输入的cmd并作出返回。
图1
图1
在这里插入图片描述
图2

联系

tty≈terminal>console , 这三者在linux里面并不是能够清晰区分开来的,因为常常也没必要区分。前面已经说了,很多概念是早期计算机的硬件概念,现代计算机已经用软件替代了,比方说tty。
shell只是一个运行于上述三者之间的一种软件。

下面解释一下:

  1. 首先tty和terminal其实是最难区分开来的,在linux里面我们一般不太会主动去区分这两个,通常也没有必要。他们都是文本流输入输出的环境
    通常意义上terminal是tty的代名词。有的tty由(软件)内核来代替硬件设备,也有一种tty——有时候叫做伪tty(pseudo-ttys)的,它是由叫做”终端模拟器“的程序提供的(通过一个中间层).
    比方说,linux里面(以ubuntu为例)可以通过Ctrl + Alt + Fn切换到第n个tty(也可以是虚拟的,比方说pty,pts),然后在新的tty下面创建新的terminal,而我们通常使用terminal的tty都是tty7,也就是图形tty口。这里的tty就有点类似于不同用户的登录窗口的感觉,你可以在不同的窗口切换,但归根结底tty也只是个和terminal一样的服务窗口罢了。
  2. 再者是console,一句话就是,console是一种特殊的terminal,它用于直接显示系统的输出消息,所以在众多terminal中,他算是primary terminal(主终端)。你可以自己尝试开启多个terminal,然后echo "hello" > /dev/console试试看,你会发现在不同的tty/terminal里面输入,“hello”也会不同。个人理解console这个主终端会随着你使用的terminal不同而动态变化。同样,console也不是很容易和tty,terminal区分开来。比如操作系统可能把那些tty叫做”console“ ”virtual console“ ”virtual terminal“之类的。
  3. 最后就是shell,它是每个terminal里面运行着的一个program而已,是这几个里面最好区分的,因为它没有硬件的概念(没有历史遗留问题),只是一种抽象的软件(从名字就看得出来)

参考

终端、Shell、tty 和控制台(console)有什么区别?
Linux 终端(TTY)
linux 系统tty、pty和pts 的概念及区别
Linux中TTY是什么意思

Logo

更多推荐