Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1271548
  • 博文数量: 482
  • 博客积分: 13297
  • 博客等级: 上将
  • 技术积分: 2890
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-12 16:25
文章分类

全部博文(482)

文章存档

2012年(9)

2011年(407)

2010年(66)

分类: LINUX

2011-08-25 10:25:39

shell,bash,zsh,console,terminal到底是什么意思,它们之间又是什么关系?查了百度,wiki,还有一些资料,虽然感觉懂了一点,但还是没彻底,虽然是很菜的问题,可是还是想问个明白
---------------------------------------------------------------------------------------------

bash ash zsh tcsh 这些都是shell,是脚本语言和命令执行环境,比如你在命令行输入 cp aaa bbb,接受你的输入并执行的就是shell。
而console(tty) fbterm xterm 这些则是终端程序,说白了就是字符型的屏幕加键盘。屏幕当然既可以执行shell程序,显示用户输入的信息,又可以显示其他的字符程序,比如wget ftp telnet ssh等等。
你要想在文本方式用键盘交互输入命令,就只需要一个终端,同时在终端里面运行一个shell(其实还是在计算机上运行,不是在终端内部运行,如果是虚拟终 端的话,这个shell会是终端的子进程。如果是真实硬件终端如vt100型终端,则是通过串口与主机连接,shell是与这个串口关联的tty的子进 程。目前的终端大多是虚拟终端了,我也是读大学的时候在图书馆用过物理终端)。
大的发行版一般用的是bash这个shell。
Unix/Linux不同于Windows,一台电脑可以同时开启很多的终端,每个终端都能同时接受不同用户的操作。是多人同时使用的操作系统。
---------------------------------------------------------------------------------------------

我的理解是console是相对于图形界面来说的,就是说字符界面称为console,图形界面称为GUI
terminal如果指的是图形界面下的字符终端如xterm之类的东东的话,它应该是一个console的仿真软件,就象Windows里的cmd一样。
bash,zsh是字符界面(console)下的一个shell,负责解析shell命令和脚本,除了bash,zsh以外,还有ash,csh,ksh,sh,tcsh等等,如果系统上装了多个shell的话,可以用chsh命令来切换。
只是我的理解,不知道对不对~~

---------------------------------------------------------------------------------------------
我总结下8、9楼的意思,还有我已知的资料,用不太严谨的语言说一下:
console相当于GUI下的terminal;
terminal相当于CLI下的console;
console、terminal都是一种字符界面;
terminal是一种特殊的console,是它的一个仿真软件;
一般console有6个,tty1-6
terminal有gnome-terminal,urxvt,mlterm等等

console、terminal相当于个外壳(或环境?),shell相当于在这个外壳下处理和人机交互相关的东西;
shell有bash,ash,zsh,tcsh等等

还没听说过怎么换console;
如果对terminal不满意,直接卸载这个terminal,然后再pacman安装一个
换shell可以修改/etc/passwd,把里面的/bin/bash换成你想要的shell

好了,上面是我总结的,语言不严谨,只是为了自己能理解,不知道对不对,大家纠正啊!

最新的总结在15楼!

---------------------------------------------------------------------------------------------
shell 是一个抽象概念,或者说抽象类,bash/zsh 等是 shell 的一种实现,或者说是一个具体类,它们都是一个程序,都能生成一个进程对象。
terminal——终端是一种设备,不是一个程序,一般说的就是能提供命令行用户界面的设备,典型的屏幕和键盘。图形终端一般不都称为终端。
shell 的一切操作都在计算机内部,只是把一些信息适当的输送到终端设备,同时还接收来自终端设备的输入。一般每个 shell 进程都会有一个终端关联,也可以没有。
一台显示器一个键盘本就只是一个终端,但很可能不够用,但又不想增加设备投入,虚拟终端应运而生,只要 Alt + Fn 切换即可。
gnome-terminal、xtern 等是一个程序,职责是模拟终端设备,和虚拟终端的区别表面上在于它以 GUI 形式的窗口出现,内部则是程序结构和系统控制结构有所不同,但本质上差不多。
console——显示系统消息的终端就叫控制台,什么拔插 U 盘,网线被拔之类,终端上就会打印出相应消息(archlinux 没有),扰乱用户当前操作,vi/vim 中的 Ctrl + l 就是对付这事情的。FreeBSD 只有 tty0 才是控制台,其它几个都只是普通终端,不会显示任何系统消息。Linux 默认所有虚拟终端都是控制台,都能显示系统消息,当然,用户可以改变设置。


---------------------------------------------------------------------------------------------
shell除了处理人机交互,还执行脚本,是操作系统能正常运行的重要组成部分。你可以读读/etc/profile这个脚本,任何用户登陆时都要先执行 它。你的用户目录/home/username/里面还有.profile .bashrc .bash_profile这类的脚本,你可以修改它们,让你每次登录时自动执行一些操作。比如在.bashrc里加一行 alias ll='ls -l'
每次登陆后,直接按ll就可以用长行方法列目录了。

---------------------------------------------------------------------------------------------
lz自己在11楼的总结已经很接近了,不过,shell才是一个环境,直译外壳你自己也提到这个词了,console是一种设备,terminal这个名词会有岐义,看你说的是终端设备还是x下的虚拟控制台了,可以是一种设备或者用以模拟该设备的一个程序了。

---------------------------------------------------------------------------------------------
结合8、9、11、12、13、14楼,最新的总结:

终端(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进程都会有一个终端关联,也可以没有。

==============================================================================================

阅读(1469) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~