terminal,console,bash/csh,shell的关系

一直对这几个概念有点模糊,今天好好的看了哈一些资料,写点东西总结哈!

 

终端(terminal,或者叫物理终端):
是一种设备,不是一个程序,一般说的就是能提供命令行用户界面的设备,典型的是屏幕和键盘,或其他的一些物理终端。
虚拟终端:
屏幕和键盘只是一个终端,可能不够用,又不想增加设备投入,就产生了虚拟终端。
gnome-terminal,urxvt,mlterm,xterm等等:
是一个程序,职责是模拟终端设备,和虚拟终端的区别表面上在于它以 GUI 形式的窗口出现,内部则是程序结构和系统控制结构有所不同,但本质上差不多。
控制台(console):
显示系统消息的终端就叫控制台,Linux 默认所有虚拟终端都是控制台,都能显示系统消息。
但有时专指CLI下的模拟终端设备的一个程序,和gnome-terminal,urxvt,mlterm,xterm等相同,只是CLI和GUI界面的区别。一般console有6个,tty1-6,CTRL+ALT+fn切换。还没听说过怎么换console

shell是一个抽象概念,shell的一切操作都在计算机内部,负责处理人机交互,执行脚本等,是操作系统能正常运行的重要组成部分
bash,ash,zsh,tcsh等是shell这个抽象概念的一种具体的实现,都是一个程序,都能生成一个进程对象。
如果想换shell的程序,可以修改/etc/passwd,把里面的/bin/bash换成你想要的shell,或者用chsh命令来切换

shell与终端的关系:shell把一些信息适当的输送到终端设备,同时还接收来自终端设备的输入。一般每个shell进程都会有一个终端关联,也可以没有。

这是论坛中一个人根据跟帖总结的,查看了几篇wikipedia中的wiki,我也说说自己的看法吧:

Terminal是一直很广义的输入/输出系统的概念,包括图形接口的GUI,文本界面的CONSOLE,Terminal是需要输入/输出硬件支持,同时需要中断处理程序等来实现,用于人机交互,而模拟终端上面说得觉得很对,就是为了复用硬件,各种OS都有自己的虚拟终端,windows默认的就是Win32 Console了,当然用过的应该还有超级终端,putty等,linux下就有更多了,一般各个桌面都会有一个自己的terminal,比如gnome-terminal,还有一些更加通用的,比如minicom等,wikipedia上有个各种平台的模拟终端的列表:http://en.wikipedia.org/wiki/List_of_terminal_emulators#X_Window_Terminals

而shell就是一个操作系统比较接近的概念了,是操作系统用来与用户交互的一个接口,网上有个《shell十三问》讲得挺不错的,上面的概括也挺不错的。

Terminal更加接近硬件,有点像是驱动程序的感觉,而shell就像一个事件处理程序一样,负责处理Terminal发给它的消息。

在《Orange's》这本书里也有一章内容也与之相关,有空可以好好研究,我对shell与终端具体怎么传递消息的细节觉得完全不知道。

wikipedia上关于terminal emulator的介绍:http://en.wikipedia.org/wiki/Terminal_emulator

你可能感兴趣的:(terminal,console,bash/csh,shell的关系)