分页: 1 / 1

shell,bash,终端的区别

发表于 : 2013-04-01 8:23
HAPPYJACKLEE
请给我解释一下bash,shell,终端的区别。
我的理解是,终端承载shell,bash是一种shell

Re: shell,bash,终端的区别

发表于 : 2013-04-01 8:59
shuizhongyu
那不就对了嘛

Sent from my MI 1S using Tapatalk 2

Re: shell,bash,终端的区别

发表于 : 2013-04-01 9:23
YeLee

Re: shell,bash,终端的区别

发表于 : 2013-04-01 18:49
taohunter
你说的“终端”本身是个有歧义的词,到底是指“终端硬件设备”呢,还是“终端设备文件”,抑或是“仿真终端程序”??这几个不同的概念经常都被简称为“终端”。。。你用的“终端”是哪一个概念呢?你的选择决定“终端承载shell“这句话是否正确。

“bash是一种shell”也不严密,确切的表述应该是“bash是一种shell环境”--同一台linux(以多用户服务器为例)只有一个shell,你使用bash shell环境,另一个人可能使用c shell环境,如果“bash是一种shell”,那岂不是一台linux机器上会有几种shell?--shell也是一个会产生歧义的词。

学概念的时候最好表述严密些,概念一旦错误,也许会影响你以后某些操作的结果,最坏的情况可能会把系统搞趴下。。。

Re: shell,bash,终端的区别

发表于 : 2013-04-01 20:37
自由建客
taohunter 写了:你说的“终端”本身是个有歧义的词,到底是指“终端硬件设备”呢,还是“终端设备文件”,抑或是“仿真终端程序”??这几个不同的概念经常都被简称为“终端”。。。你用的“终端”是哪一个概念呢?你的选择决定“终端承载shell“这句话是否正确。

“bash是一种shell”也不严密,确切的表述应该是“bash是一种shell环境”--同一台linux(以多用户服务器为例)只有一个shell,你使用bash shell环境,另一个人可能使用c shell环境,如果“bash是一种shell”,那岂不是一台linux机器上会有几种shell?--shell也是一个会产生歧义的词。

学概念的时候最好表述严密些,概念一旦错误,也许会影响你以后某些操作的结果,最坏的情况可能会把系统搞趴下。。。
楼主问的「终端」就是「终端」这个词,概念等诸位回答。
别想太多,终端就是一种硬件设备,接收程序输出字符并显示,接收键盘输入并传给程序。gnome-terminal 等程序属模拟终端,也叫伪终端,对 shell 来说,仍是硬件。
shell 是一种软件,解析用户输入,执行相应命令。
别想太多,bash 就是一种 shell。一般 Linux 发行版默认安装至少有两种 shell,bash 便是其一。

Re: shell,bash,终端的区别

发表于 : 2013-04-01 21:57
cuihao
:em01 就按LZ那样理解就成。
又不是编撰辞海的,抠那么细干甚。

Re: shell,bash,终端的区别

发表于 : 2013-04-01 22:30
taohunter
cuihao 写了::em01 就按LZ那样理解就成。
又不是编撰辞海的,抠那么细干甚。
一个作为外部设备存在的“终端”会"承载"shell么?如果一台设定好的linux机器不连接任何终端照样有kernel和shell在运行,例如只提供web访问服务,那么这时是谁在“承载”shell,总不会web应用直接去和kernel打交道了吧?如果我没理解错,人家楼主本身就是在问一个概念性的问题,所以才不厌其烦给他说明一下。你自己一直持有的恐怕也是完全错误的概念,就别不懂装懂啦。。。

Re: shell,bash,终端的区别

发表于 : 2013-04-02 8:11
cuihao
taohunter 写了:
cuihao 写了::em01 就按LZ那样理解就成。
又不是编撰辞海的,抠那么细干甚。
一个作为外部设备存在的“终端”会"承载"shell么?如果一台设定好的linux机器不连接任何终端照样有kernel和shell在运行,例如只提供web访问服务,那么这时是谁在“承载”shell,总不会web应用直接去和kernel打交道了吧?如果我没理解错,人家楼主本身就是在问一个概念性的问题,所以才不厌其烦给他说明一下。你自己一直持有的恐怕也是完全错误的概念,就别不懂装懂啦。。。
=3= 呜,没有反驳的意思啦。窝鞠躬谢罪

那谈谈我对这些术语的看法吧:
“终端”是一种设备,用来直接获取输入、呈现输出。我以为,无论是模拟的终端还是物理终端,最终在系统里是用相同的方式交互的,对于程序大概是没有区别的。
“shell”呢,是这么一种程序,它可以与内核交互处理从终端得到的输入,并将输出传回终端

另外,对于“一个作为外部设备存在的“终端”会"承载"shell么”这个问题,我觉得照上面的理解,就自然是可以啦。因为,虚拟终端和物理终端在程序看来是一样的吧。

至于web应用的例子,我不认为程序非得通过shell和内核交互,我确实认为“程序是可以直接和系统内核打交道的”。shell 本身应该就是一种应用程序,不需要通过 shell 来和系统内核打交道(唔,这个例子貌似奇葩了点)。

Re: shell,bash,终端的区别

发表于 : 2013-04-02 9:38
百草谷居士
真有意思!终端不就是提供人机交互的设备吗?

Re: shell,bash,终端的区别

发表于 : 2013-04-02 17:43
taohunter
cuihao 写了:至于web应用的例子,我不认为程序非得通过shell和内核交互,我确实认为“程序是可以直接和系统内核打交道的”。shell 本身应该就是一种应用程序,不需要通过 shell 来和系统内核打交道(唔,这个例子貌似奇葩了点)。
只要是一个正常运行的linux/unix系统,shell永远都保护在kernel的外层,是把用户应用程序和内核隔离开的一个抽象层,其作用相当于一个”接口“。所谓”不需要通过 shell 来和系统内核打交道“其实是假象,作为应用程序,无论是交互式终端命令行操作还是web应用等不需要终端设备的操作其实都要通过shell才能访问内核,甚至连所谓的内核操作工具软件也不例外。

至于硬件概念上的终端设备对操作系统来讲是操作系统之外的外部设备。而shell是一个完整的操作系统的一部分,与终端是没有任何直接关系的,完全可以脱离终端设备”运行“,web应用的例子就说明了这一点。但一个正在运行的linux桌面系统如ubuntu中随时都会有支持诸如tty,pty等设备的内核模块在运行,所以当一个“终端”连接到系统时,这些内核模块就会通过shell将数据传送给应用层,通过使用终端的用户所选用的shell环境如bash,将相应的数据以特定的界面显示在用户的终端物理设备上。所以真正的“承载”shell的永远都是内核。只有把操作终端设备文件的那部分内核模块看成“终端”(这才是平时很多人的“感觉”),说“终端”承载shell才可以说是对的。

如果你愿意把shell理解成”应用程序“,虽然对我学习的操作系统/应用程序的概念有点“颠覆”,但还是你的权力。。。

Re: shell,bash,终端的区别

发表于 : 2013-04-02 18:20
HAPPYJACKLEE
taohunter 写了:你说的“终端”本身是个有歧义的词,到底是指“终端硬件设备”呢,还是“终端设备文件”,抑或是“仿真终端程序”??这几个不同的概念经常都被简称为“终端”。。。你用的“终端”是哪一个概念呢?你的选择决定“终端承载shell“这句话是否正确。

“bash是一种shell”也不严密,确切的表述应该是“bash是一种shell环境”--同一台linux(以多用户服务器为例)只有一个shell,你使用bash shell环境,另一个人可能使用c shell环境,如果“bash是一种shell”,那岂不是一台linux机器上会有几种shell?--shell也是一个会产生歧义的词。

学概念的时候最好表述严密些,概念一旦错误,也许会影响你以后某些操作的结果,最坏的情况可能会把系统搞趴下。。。


你说的很好,谢谢。
我说的终端就是 ctrl + alt +T 出来的那个,还有 ctrl+alt+(F1~F6)那个

Re: shell,bash,终端的区别

发表于 : 2013-04-02 21:25
懒蜗牛Gentoo
可以参见我签名第六章

Re: shell,bash,终端的区别

发表于 : 2017-08-04 11:25
rickqin
cuihao 写了:
taohunter 写了:
cuihao 写了::em01 就按LZ那样理解就成。
又不是编撰辞海的,抠那么细干甚。
一个作为外部设备存在的“终端”会"承载"shell么?如果一台设定好的linux机器不连接任何终端照样有kernel和shell在运行,例如只提供web访问服务,那么这时是谁在“承载”shell,总不会web应用直接去和kernel打交道了吧?如果我没理解错,人家楼主本身就是在问一个概念性的问题,所以才不厌其烦给他说明一下。你自己一直持有的恐怕也是完全错误的概念,就别不懂装懂啦。。。
=3= 呜,没有反驳的意思啦。窝鞠躬谢罪

那谈谈我对这些术语的看法吧:
“终端”是一种设备,用来直接获取输入、呈现输出。我以为,无论是模拟的终端还是物理终端,最终在系统里是用相同的方式交互的,对于程序大概是没有区别的。
“shell”呢,是这么一种程序,它可以与内核交互处理从终端得到的输入,并将输出传回终端

另外,对于“一个作为外部设备存在的“终端”会"承载"shell么”这个问题,我觉得照上面的理解,就自然是可以啦。因为,虚拟终端和物理终端在程序看来是一样的吧。

至于web应用的例子,我不认为程序非得通过shell和内核交互,我确实认为“程序是可以直接和系统内核打交道的”。shell 本身应该就是一种应用程序,不需要通过 shell 来和系统内核打交道(唔,这个例子貌似奇葩了点)。
我个人认为计算机领域还是要严谨一些的好,呃,仅代表我个人意见。我是做软件开发的,在中文社区搜到的资料要么是东搬西抄来的,要么写的含含糊糊,要么错误百出。唉,我们中文社区需要多努力啊。那个stackoverflow就非常棒,上面的回答也相对精准。我们的知乎也在朝着stackoverflow的方向在努力。