Linux的使用者可能每天都会接触到 Bash、Shell、控制台、终端。它们之间有什么不同吗?本文为你快速解释这些概念以及它们的区别。

什么是终端

首先我们来弄清楚什么是终端(terminal)。按照百度百科的解释是:“经由通信设施向计算机输入程序和数据或接收计算机输出处理结果的设备。” 听起来似乎有点晦涩,其实用台式PC机来举例就很容易理解了。一台台式机是由主机(机箱)和很多外围设备组成的。主机里边包括主板、CPU、内存、硬盘、和其他芯片等等。外围设备包括显示器、鼠标、键盘、耳机、麦克风、和摄像头等等。这些外围设备就被称为终端,负责向主机输入数据的就叫输入终端,比如鼠标、键盘、麦克风、摄像头,负责接收主机输出数据的设备就被称作输出终端,比如显示器、耳机。

所以有两个概念我们这里就清楚了:

计算机 = 主机 + 终端

终端 = 输入终端 + 输出终端

终端的类型

终端,除了可以分为输入终端与输出终端外,还可以按照与主机的距离可以本地终端和远程终端,或者按照与主机的连接方式分成物理终端和虚拟终端。

举个例子,比如我们在杭州的某个机房里有一台服务器,用VGA线接了一台显示器,用USB连接了键盘,那么这台显示器和这个键盘就是服务器的本地终端。假如我们在隔壁机房用串口线又接了一个显示器和键盘,那它们就可以称为远程终端。不管是在本地机房还是隔壁机房,因为这几个终端和服务器都是通过物理设备直接连接的,所以它们都被称为物理终端。物理终端在 Linux中被标识为 tty。它是teletype的缩写,因为在计算机早期的时候,Ken Thompson 和 Dennis Ritchie用电传打印机作为他们  Unix 服务器的终端(参考《Linux,Unix,GNU 到底有什么样的渊源?》),所以这个名字就这样被沿用了下来。

假如我们在上海的家里通过 ssh 远程登陆杭州的服务器,那么我们在家中用的设备就是服务器的远程终端,也是一个虚拟终端(因为没有与服务器在本地用物理设备连接)。虚拟终端在 Linux 中用 pts (pseudo termial slave)来标识。用 who 命令可以查看当前登陆系统的用户,以及他们所使用的终端类型。

什么是控制台

控制台(console)与终端现在已经几乎表示同一个意思了,但是在计算机发展的早期它们还是有本质区别的。最初,大型计算机(可能有几间屋子那么大)只有一个终端,被称为”控制台“,而它真的是一个控制台,就像下面这张图这样,有很多的仪表和开关,技术人员就是通过它来对计算机发出指令。那个时候计算机虽然很大,但每次只能有一个人来操作,并且一次也只能运行一个程序。后来Ken Thompson 和 Dennis Ritchie发明了Unix,于是操作系统可以同时运行多个程序,并且支持多个用户同时登陆。这样一来,仅有一个控制台就显得不够了。因为控制台又很贵,所以 Ken Thompson 和 Dennis Ritchie就用了相对便宜的电传打字机作为新增加的终端连接到他们的计算机上。虽然一台计算机可以连接很多个终端,但这里边只能有一个控制台,并且控制台的权限要远大于其他的终端,比如当系统发生启动错误时,只有控制台会显示错误消息,而其他终端不会;或者当系统进入单用户登陆模式时,只有通过控制台才能进行登陆,而通过其他终端没有办法登陆。所以如果用一句话来总结控制台与终端的区别,可以说控制台是计算机最早的以及权限最大的一个终端。

什么是 Shell 和 Bash

终端和主机虽然连接起来了,但是计算机还是需要一个程序才能明白我们输入的命令,这个程序就是 Shell。我们的命令就是通过终端输入到 Shell 里,再由 Shell 转换成计算机明白的指令,然后计算机才能运行。

Shell 有很多种,我们最常用的是 Bash,另外还有Csh, Ksh, Zsh等等。对于Bash,Linux的用户应该每天都在使用,这里就不再展开介绍了。

最后

控制台、终端、Shell、Bash 这些名词经常被大家混淆,虽然今天在很多场合它们经常被替换使用,大家也都明白,不过希望通过本文大家可以弄清楚它们之间的区别和联系。

推荐阅读:

《一篇文章看清楚 Linux 的职业发展方向》

《2020年你最需要掌握的11种编程语言》

《微软:悬赏10万美金破解 Linux 系统》

《安卓到底是不是Linux》

《Linux的运行级别与目标》

《软链接 vs. 硬链接》

《Linux 目录详解》

《虚拟机安装 Linux 最完整攻略》

《Xshell 与 Xftp 的安装与使用》

《Linux,Unix,GNU 到底有什么样的渊源?》

欢迎大家关注我的微信公众号,获取知识干货、增加面试经验、了解程序人生。
回复【面试】,获取技术大厂面试宝典

一篇文章带你快速弄清楚什么是终端相关推荐

  1. 一篇文章带你快速理解JVM运行时数据区 、程序计数器详解 (手画详图)值得收藏!!!

    受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话:"八小时内谋生活,八小时外谋发展. ...

  2. 一篇文章带你快速入门JavaScript(自学者福利)

    文章目录 一.开始之前 二.数据类型 1.变量 2.数字类型(number) 3.字符串类型(string) 4.布尔型.Null和Undefined 5.数据类型转换 三.运算符 四.控制语句 五. ...

  3. 两个相邻盒子的边框怎么只显示一个_一篇文章带你快速理解盒子模型「经典案例」...

    今天带大家快速理解盒子模型,直接上代码: css盒子 我的css盒子测试模型 上面代码没有任何难度,只是写了一个div标签,大家已经知道,div标签是块级元素,所以会占满一行: 但是我们也注意到了图片 ...

  4. 【Golang】一篇文章带你快速了解Go语言为什么你要学习Go语言

    目录 1. 为什么互联网世界需要Go语言 1.1 硬件限制:摩尔定律已然失效 1.2 Go语言为并发而生 1.3 Go性能强悍 1.4 Go语言简单易学 1.4.1 语法简洁 1.4.2 代码风格统一 ...

  5. 一篇文章带你快速理解微服务架构,由浅入深带你走进微服务架构的核心

    戳蓝字"CSDN云计算"关注我们哦! 文章来自:Java和Android架构 什么是微服务 首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应 ...

  6. 一篇文章带你快速了解荧光蛋白

    好看的各种荧光蛋白 荧光蛋白是分子生物学研究中的重要工具,在实验室中,一个普通的本科生经过科研训练就可以表达发出漂亮荧光的蛋白.尽管科学家们一直对荧光蛋白进行改造来开发出更多的生物学工具,但仍然面临着 ...

  7. 六大维度层层剖析,一篇文章带你快速读懂信息无障碍

    我的同事和朋友有一部分是视障人士--盲人或者低视力. 这类群体,据中国盲人协会最新统计在中国有1700多万,加上病变.意外.功能性退化,视障人群比例大约是100比1,这个比例其实很高. 我的这些朋友习 ...

  8. 一篇文章带你快速入门 AdminLTE

    文章目录 一.相关概述 二.如何使用 三.示例 一.相关概述 AdminLTE是一款建立在bootstrap和jquery之上的开源的模板主题工具, 它提供了一系列响应的.可重复使用的组件, 并内置了 ...

  9. 一篇文章带你快速入门JavaScript(实操代码)

    目录 一.前提简介 1.1什么是JavaScript 1.2JavaScript和Java语言的区别 1.3Html.Css和Javascript 1.4Javascript作用 二.实操代码 2.1 ...

最新文章

  1. 负载均衡Load Balance学习
  2. 计算机软件出版,[计算机软件及应用]出版信息管理系统.doc
  3. jsp 下拉列表选取触发function_Bootstrap下拉菜单样式
  4. 原生CSS,实现点击按钮出现交互弹窗【新手扫盲】
  5. H. Fight Against Monsters
  6. 这可能是最全面的 python 字符串拼接总结!多种方法选最优
  7. boost::signals2::deconstruct 作为构建后的工厂函数的测试程序
  8. 变种 背包问题_【朝夕的ACM笔记】动态规划-背包问题
  9. 测试你的电脑是否支持Hyper-V
  10. 排除jar_通过IDEA快速定位和排除依赖冲突
  11. PPAPI 插件编写
  12. html设置首缩选进两字符,首行缩进2字符怎么设置 css
  13. Python变量和基本数据类型
  14. AutoCAD与ArcGIS的5种集成方式
  15. DP问题(动态规划)
  16. Facebook第三方登录流程总结
  17. 从根儿上理解虚拟内存
  18. python对比2个文件内容
  19. 2021年最有前途的10种编程语言
  20. C++函数模板学习总结

热门文章

  1. 后台如何暴漏IP用于前后端测试
  2. 【第五篇】Maven系列教程-聚合工程
  3. Spring Ioc源码分析系列--容器实例化Bean的四种方法
  4. 学习html的心得总结
  5. 日本公司研发出一款可食用的便签纸
  6. [CF1463F]Max Correct Set
  7. 走进小程序【十一】微信小程序【使用Echarts 和 腾讯地图】
  8. SDN:mininet交换机流表操作
  9. 优麒麟系统安装MySQL_安装优麒麟(ubuntukylin)操作系统详解
  10. 如何修改IMX6UL开发板时钟配置?