转自:http://www.2cto.com/os/201403/282583.html

http://blog.sina.com.cn/s/blog_bcdac52b0101i2r1.html

控制台,终端,tty,shell等概念的区别

使用linux已经有一段时间,却一直弄不明白这几个概念之间的区别。虽然一直在用,但是很多概念都感觉模糊不清,这样不上不下的状态实在令人不爽。下面就澄清一下这些概念。

这些概念本身有着非常浓厚的历史气息,随着时代的发展,他们的含义也在发生改变,它们有些已经失去了最初的含义,但是它们的名字却被保留了下来。

控制台(Console)

控制台(Console)是物理设备,用于输入输出,它直接连接在计算机上,是计算机系统的一部分。计算机输出的信息会显示在控制台上,例如BIOS的输出,内核的输出。

Linux终端也称为虚拟控制台,是Linux从UNIX继承来的标准特性。显示器和键盘合称为终端,因为它们可以对系统进行控制,所以又称为控制台,一台计算机的输入/输出设备就是一个物理的控制台。如果在一台计算机上用软件的方法实现了多个互不干扰、独立工作的控制台界面,就是实现了多个虚拟控制台。Linux终端采用字符命令行方式工作,用户通过键盘输入命令,通过Linux终端对系统进行控制。

终端(Terminal)

终端(Terminal)也是一台物理设备,只用于输入输出,本身没有强大的计算能力。一台计算机只有一个控制台,在计算资源紧张的时代,人们想共享一台计算机,可以通过终端连接到计算机上,将指令输入终端,终端传送给计算机,计算机完成指令后,将输出传送给终端,终端将结果显示给用户。

虚拟控制台(Virtual Console),虚拟终端(Virtual Terminal)

虚拟控制台(Virtual Console)和虚拟终端是一样的。我们只有一台终端(物理设备),这是我们与计算机之间的用户接口。假如有一天,我们想拥有多个用户接口,那么,一方面我们可以增加终端数目(物理设备),另一方面,还可以在同一台终端(物理设备)上虚拟出多个终端,它们之间互相不影响,至少看起来互相不影响。这些终端就是虚拟终端。

在Ubuntu中,我们按下Ctrl+Alt+Fx时,会进入第x个虚拟终端,一共有七个虚拟终端,其中第七个虚拟终端,就是我们默认使用的图形用户界面。

终端模拟器(Terminal Emulator)

我们知道,终端是一种物理设备,而终端模拟器(Terminal Emulator),是一个程序,这些程序用来模拟物理终端。图形用户界面中的终端模拟器一般称为终端窗口(Terminal Window),我们在Ubuntu下打开的gnome-terminal就属于此类。

tty

tty的全称是TeleTYpewriter,这就是早期的终端(物理设备),它们用于向计算机发送数据,并将计算机的返回结果打印出来。显示器出现后,终端不再将结果打印出来,而是显示在显示器上。但是tty的名字还是保留了下来。

在Ubuntu中,我们按下Ctrl+Alt+F1时,会进入第1个虚拟终端,你可以看到屏幕上方显示的tty1。

shell

shell 和之前说的几个概念截然不同,之前的几个概念都是与计算机的输入输出相关的,而shell是和内核相关的。内核为上层的应用提供了很多服务,shell在内核的上层,在应用程序的下层。例如,你写了一个 hello world 程序,你并不用显式地创建一个进程来运行你的程序,你把写好的程序交给shell就行了,由shell负责为你的程序创建进程。

我们在终端模拟器中输入命令时,终端模拟器本身并不解释执行这些命令,它只负责输入输出,真正解释执行这些命令的,是shell。

我们平时使用的sh, bash, csh是shell的不同实现。

  • sh sh这个概念本身就有岐义,它可以指shell程序的名字,也代表了shell的实现。

    Thompson shell是第一个Unix shell,由 Ken Thompso于1971年在Unix第一版本中引入,shell的程序名即为sh。Bourne shell作为Thompson shell的替代,由 Stephen Bourne于1977年在Unix第七版中引入,它的程序名也是sh。Bourne shell不仅仅是一个命令解释器,更作为一种编程语言,提供了Thompson shell不具备的程序控制功能,并随着 Brian W. Kernighan 和 Rob Pike 的 The UNIX Programming Environment的出版而名声大噪。

  • csh csh全称为 C Shell,由 Bill Joy在70年代晚期完成,那时候他还是加州伯克利大学的研究生。tcsh是csh的升级版。与sh不同,csh的shell脚本,语法接近于C语言。

  • bash bash是由 Brian Fox为GNU项目开发的自由软件,作为Bourne shell的替代品,于1989年发布。是Linux和Mac OS X的默认shell。bash的命令语法是Bourne shell命令语法的超集,从ksh和csh借鉴了一些思想。

最新文章

  1. jquery插件的两种形式
  2. Aoite 系列(01) - 比 Dapper 更好用的 ORM
  3. thinkPHP3.2.3集成swoole扩展
  4. 智能车学习(七)——按键矩阵的实现
  5. Hadoop安装指引
  6. Powerdesigner逆向工程从sql server数据库生成pdm (转载)
  7. adbWireless 简单教程
  8. 第一天开通博客,就粗略写一下刚了解TCP/IP协议工作过程
  9. CetnOS minimal 网络不可用
  10. 解决方案-Microsoft Visual Studio 2012 已停止工作
  11. 批处理命令篇--配置免安装mysql 5.6.22, 以及1067错误的一个解决方法
  12. linux权限之su和sudo的差别
  13. 项目设计day1
  14. [OpenCV-Python] OpenCV 核心操作 部分 III
  15. [LeetCode] 566. Reshape the Matrix_Easy
  16. Mask-RCNN数据集制作
  17. skynet1.0阅读笔记2_skynet的消息投递skynet.call
  18. linux进程间通讯的几种方式的特点和优缺点
  19. scrollView不能进行滚动
  20. SQL Server数据库优化经验总结

热门文章

  1. Chrome浏览器扩展开发系列之三:Google Chrome浏览器扩展的架构
  2. JavaScript一个猜数字游戏
  3. 标准IO: 文件的打开与关闭函数 fopen & fclose
  4. HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题)
  5. 进击的新版NavMesh系统:看我飞檐走壁
  6. 3,Spring Boot热部署
  7. Mac终端查看sqlite3数据库、表数据等
  8. app耗电优化之二 使用电源管理来安排任务
  9. 教你做一个单机版人事管理系统(Winform版)treeview与listview使用详情
  10. win10下安装python2与python3以及pip共存