shell,bash,终端的区别
发表于 : 2013-04-01 8:23
请给我解释一下bash,shell,终端的区别。
我的理解是,终端承载shell,bash是一种shell
我的理解是,终端承载shell,bash是一种shell
楼主问的「终端」就是「终端」这个词,概念等诸位回答。taohunter 写了:你说的“终端”本身是个有歧义的词,到底是指“终端硬件设备”呢,还是“终端设备文件”,抑或是“仿真终端程序”??这几个不同的概念经常都被简称为“终端”。。。你用的“终端”是哪一个概念呢?你的选择决定“终端承载shell“这句话是否正确。
“bash是一种shell”也不严密,确切的表述应该是“bash是一种shell环境”--同一台linux(以多用户服务器为例)只有一个shell,你使用bash shell环境,另一个人可能使用c shell环境,如果“bash是一种shell”,那岂不是一台linux机器上会有几种shell?--shell也是一个会产生歧义的词。
学概念的时候最好表述严密些,概念一旦错误,也许会影响你以后某些操作的结果,最坏的情况可能会把系统搞趴下。。。
一个作为外部设备存在的“终端”会"承载"shell么?如果一台设定好的linux机器不连接任何终端照样有kernel和shell在运行,例如只提供web访问服务,那么这时是谁在“承载”shell,总不会web应用直接去和kernel打交道了吧?如果我没理解错,人家楼主本身就是在问一个概念性的问题,所以才不厌其烦给他说明一下。你自己一直持有的恐怕也是完全错误的概念,就别不懂装懂啦。。。cuihao 写了: 就按LZ那样理解就成。
又不是编撰辞海的,抠那么细干甚。
=3= 呜,没有反驳的意思啦。窝鞠躬谢罪。taohunter 写了:一个作为外部设备存在的“终端”会"承载"shell么?如果一台设定好的linux机器不连接任何终端照样有kernel和shell在运行,例如只提供web访问服务,那么这时是谁在“承载”shell,总不会web应用直接去和kernel打交道了吧?如果我没理解错,人家楼主本身就是在问一个概念性的问题,所以才不厌其烦给他说明一下。你自己一直持有的恐怕也是完全错误的概念,就别不懂装懂啦。。。cuihao 写了: 就按LZ那样理解就成。
又不是编撰辞海的,抠那么细干甚。
只要是一个正常运行的linux/unix系统,shell永远都保护在kernel的外层,是把用户应用程序和内核隔离开的一个抽象层,其作用相当于一个”接口“。所谓”不需要通过 shell 来和系统内核打交道“其实是假象,作为应用程序,无论是交互式终端命令行操作还是web应用等不需要终端设备的操作其实都要通过shell才能访问内核,甚至连所谓的内核操作工具软件也不例外。cuihao 写了:至于web应用的例子,我不认为程序非得通过shell和内核交互,我确实认为“程序是可以直接和系统内核打交道的”。shell 本身应该就是一种应用程序,不需要通过 shell 来和系统内核打交道(唔,这个例子貌似奇葩了点)。
taohunter 写了:你说的“终端”本身是个有歧义的词,到底是指“终端硬件设备”呢,还是“终端设备文件”,抑或是“仿真终端程序”??这几个不同的概念经常都被简称为“终端”。。。你用的“终端”是哪一个概念呢?你的选择决定“终端承载shell“这句话是否正确。
“bash是一种shell”也不严密,确切的表述应该是“bash是一种shell环境”--同一台linux(以多用户服务器为例)只有一个shell,你使用bash shell环境,另一个人可能使用c shell环境,如果“bash是一种shell”,那岂不是一台linux机器上会有几种shell?--shell也是一个会产生歧义的词。
学概念的时候最好表述严密些,概念一旦错误,也许会影响你以后某些操作的结果,最坏的情况可能会把系统搞趴下。。。
我个人认为计算机领域还是要严谨一些的好,呃,仅代表我个人意见。我是做软件开发的,在中文社区搜到的资料要么是东搬西抄来的,要么写的含含糊糊,要么错误百出。唉,我们中文社区需要多努力啊。那个stackoverflow就非常棒,上面的回答也相对精准。我们的知乎也在朝着stackoverflow的方向在努力。cuihao 写了:=3= 呜,没有反驳的意思啦。窝鞠躬谢罪。taohunter 写了:一个作为外部设备存在的“终端”会"承载"shell么?如果一台设定好的linux机器不连接任何终端照样有kernel和shell在运行,例如只提供web访问服务,那么这时是谁在“承载”shell,总不会web应用直接去和kernel打交道了吧?如果我没理解错,人家楼主本身就是在问一个概念性的问题,所以才不厌其烦给他说明一下。你自己一直持有的恐怕也是完全错误的概念,就别不懂装懂啦。。。cuihao 写了: 就按LZ那样理解就成。
又不是编撰辞海的,抠那么细干甚。
那谈谈我对这些术语的看法吧:
“终端”是一种设备,用来直接获取输入、呈现输出。我以为,无论是模拟的终端还是物理终端,最终在系统里是用相同的方式交互的,对于程序大概是没有区别的。
“shell”呢,是这么一种程序,它可以与内核交互处理从终端得到的输入,并将输出传回终端。
另外,对于“一个作为外部设备存在的“终端”会"承载"shell么”这个问题,我觉得照上面的理解,就自然是可以啦。因为,虚拟终端和物理终端在程序看来是一样的吧。
至于web应用的例子,我不认为程序非得通过shell和内核交互,我确实认为“程序是可以直接和系统内核打交道的”。shell 本身应该就是一种应用程序,不需要通过 shell 来和系统内核打交道(唔,这个例子貌似奇葩了点)。