shell和 terminal 终端是什么? 您所在的位置:网站首页 fish软件是干什么 shell和 terminal 终端是什么?

shell和 terminal 终端是什么?

#shell和 terminal 终端是什么?| 来源: 网络整理| 查看: 265

文章目录 Terminal 终端console 控制台终端模拟器 (Terminal Emulator)终端窗口 (Terminal Window) 与虚拟控制台 (Virtual Console)TTY ShellShell 与终端的关系

Terminal 终端

早期计算机很贵,一台计算机有很多个人使用,每个人都有一套输入输出设备。当时这个输入输出设备就是终端,物理硬件是“电传打印机”。键盘输入,打印卡纸输出。后来显示器出现,就不使用卡纸了,一点都不环保。 image.png

console 控制台

控制台是嵌入在主机上的一些物理控制按钮,比如开机关机键。显然这是管理员才能接触并使用的。 后来为了更细致的管理主机,管理员也要一套输入输出设备,也就是终端,一个权限更高的终端。所以说控制台就是更牛逼的终端,本质没啥区别。 不过随着个人计算机的普及,控制台 (Console) 与终端 (Terminal) 的概念已经逐渐模糊。在现代,我们的键盘与显示器既可以认为是控制台,也可以认为是普通的终端。当你在管理系统时,它们是控制台;当你在做一般的工作时(浏览网页、编辑文档等),它们就是终端。我们自己既是一般用户,也是系统管理员。 左边控制台,右边终端

终端模拟器 (Terminal Emulator)

随着计算机的进化,一人一台计算机不是梦,我们已经见不到专门的终端硬件了,取而代之的则是键盘与显示器。 为了能继续使用那些传统的、不兼容图形接口的命令行程序,就出现了终端模拟器,来模拟物理终端的行为。

在那些传统命令行 (CLI) 程序看来,终端模拟器就是一个传统终端设备;而在现代图形操作系统的图形接口看来,终端模拟器就是一个 GUI 程序。

一个终端模拟器的标准工作流程是这样的:

捕获你的键盘输入;将输入发送给命令行程序(程序会认为这是从一个真正的终端设备输入的);拿到命令行程序的输出结果(STDOUT 以及 STDERR);调用图形接口(比如 X11),将输出结果渲染至显示器。

终端模拟器有很多,这里就举几个经典的例子:

GNU/Linux:gnome-terminal、Konsole;macOS:Terminal.app、iTerm2;Windows:Win32 控制台、ConEmu 等。

在专门的终端硬件已经基本上仅存于计算机博物馆的现代,人们通常图省事儿,直接称呼终端模拟器为「终端」。

终端窗口 (Terminal Window) 与虚拟控制台 (Virtual Console)

图形操作界面普及后,大部分终端模拟器都是在图形用户界面 (GUI) 中运行的,但是也有例外。

比如在 GNU/Linux 操作系统中,按下 Ctrl + Alt + F1,F2…F6 等组合键可以切换出好几个黑不溜秋的全屏终端界面,而按下 Ctrl + Alt + F7 才是切换回图形界面。不过不要被它们唬着了,虽然它们并不运行在图形界面中,但其实它们也是终端模拟器的一种。

这些全屏的终端界面与那些运行在 GUI 下的终端模拟器的唯一区别就是它们是由操作系统内核直接提供的。这些由内核直接提供的终端界面被叫做 虚拟控制台 (Virtual Console),而上面提到的那些运行在图形界面上的终端模拟器则被叫做 终端窗口 (Terminal Window)。除此之外并没有什么差别。

当然了,因为终端窗口是跑在图形界面上的,所有如果图形界面宕掉了那它们也就跟着完蛋了。这时候你至少还可以切换到 Virtual Console 去救火,因为它们由内核直接提供,只要系统本身不出问题一般都可用(笑)。

TTY

简单来说,tty 就是终端的统称。

为什么呢?看了上面的 2.1 节的同学应该知道,最早的 Unix 终端是 ASR-33 电传打字机。而电传打字机 (Teletype / Teletypewriter) 的英文缩写就是 tty,即 tty 这个名称的来源。

由于 Unix 被设计为一个多用户操作系统,所以人们会在计算机上连接多个终端(在当时,这些终端全都是电传打字机)。Unix 系统为了支持这些电传打字机,就设计了名为 tty 的子系统(没错,因为当时的终端全都是 tty,所以这个系统也被命名为了 tty,就是这么简单粗暴),将具体的硬件设备抽象为操作系统内部位于 /dev/tty* 的设备文件。

为什么要把电传打字机这个硬件设备抽象成「tty 设备」文件呢?有兴趣的同学可以去了解一下 Unix 操作系统中 Everything is a file 的概念。

image.png 还记得上面我们说过的特殊的终端,也就是通过 Ctrl + Alt + F1-6 呼出的那些虚拟控制台 (Virtual Console) 吗?其对应的就是上图中的 tty1 到 tty6。

随着计算机的发展,终端设备已经不再限制于电传打字机,但是 tty 这个名称还是就这么留了下来。久而久之,它们的概念就混淆在了一起。所以在现代,tty 设备就是终端设备,终端设备就是 tty 设备,无需区分。

由于早期计算机上的 串行端口 (Serial Port) 最大的用途就是连接终端设备,所以当时的 Unix 会把串口上的设备也同样抽象为 tty 设备(位于 /dev/ttyS*)。因此,现在人们也经常将串口设备称呼为 tty 设备。

在 tty 子系统中后来还衍生出了 pty、ptmx、pts 等概念,这里就不详细展开了。有兴趣的同学可以参考一下这篇文章:https://segmentfault.com/a/1190000009082089

Shell

大家都知道,操作系统有一个叫做 内核 (Kernel) 的东西,它管理着整台计算机的硬件,是现代操作系统中最基本的部分。但是,内核处于系统的底层,是不能让普通用户随意操作的,不然一个不小心系统就崩溃啦!

但我们总还是要让用户操作系统的,怎么办呢?这就需要一个专门的程序,它接受用户输入的命令,然后帮我们与内核沟通,最后让内核完成我们的任务。这个提供用户界面的程序被叫做 Shell (壳层)。

Shell 通常可以分为两种:**命令行 Shell **与 图形 Shell。 顾名思义,前者提供一个命令行界面 (CLI),后者提供一个图形用户界面 (GUI)。Windows 下的 explorer.exe 就是一个典型的图形 Shell(没错,它确实是,因为它接受来自你的指令,并且会帮你与内核交互完成你的指令)。 广义上讲,整个桌面环境都是一个 shell,它接受指令传给内核并返回结果。

常见或历史上知名的命令行 Shell 有:

适用于 Unix 及类 Unix 系统: sh (Bourne shell),最经典的 Unix shell;bash (Bourne-Again shell),目前绝大多数 Linux 发行版的默认 shell;zsh (Z shell),我个人最喜欢的 shell;fish (Friendly interactive shell),专注于易用性与友好用户体验的 shell; Windows 下的 cmd.exe (命令提示符) 与 PowerShell。 Shell 与终端的关系

终端里面包含了 shell,因为终端只是个输入输出设备,真正和系统内核交互的是 shell。

终端干的活儿是从用户这里接收输入(键盘、鼠标等输入设备),扔给 Shell,然后把 Shell 返回的结果展示给用户(比如通过显示器)。而 Shell 干的活儿是从终端那里拿到用户输入的命令,解析后交给操作系统内核去执行,并把执行结果返回给终端。

在桌面图形操作系统中,打开终端,真正的名称为终端模拟器或者终端窗口,里面都运行了一个 shell。 比如 windows 中的终端为 conhost.exe,打开它会自动启动 cmd.exe。因为终端离开 shell 无法发挥作用,cmd.exe 才是 windows 中的 shell。 同样打开命令行的 shell,也会启动一个终端,要不然无法输入输出。windows 中还有另一个 shell 为 PowerShell,打开它也会默认启动 conhost.exe 这个终端。

https://segmentfault.com/a/1190000016129862



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有