shell,bash,终端的区别

为当前最终发行版之前的所有版本提供支持
回复
HAPPYJACKLEE
帖子: 6
注册时间: 2013-03-14 17:55
系统: ubuntu 12.04
送出感谢: 0
接收感谢: 0

shell,bash,终端的区别

#1

帖子 HAPPYJACKLEE » 2013-04-01 8:23

请给我解释一下bash,shell,终端的区别。
我的理解是,终端承载shell,bash是一种shell
头像
shuizhongyu
帖子: 287
注册时间: 2012-11-06 12:43
系统: arch,ubuntu
来自: 安徽合肥
送出感谢: 7 次
接收感谢: 0
联系:

Re: shell,bash,终端的区别

#2

帖子 shuizhongyu » 2013-04-01 8:59

那不就对了嘛

Sent from my MI 1S using Tapatalk 2
Luckily,I have google.

新手,请大家不吝赐教,十分感谢
头像
YeLee
论坛版主
帖子: 26408
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
送出感谢: 25 次
接收感谢: 307 次
联系:

Re: shell,bash,终端的区别

#3

帖子 YeLee » 2013-04-01 9:23

◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
taohunter
帖子: 1554
注册时间: 2012-03-31 3:29
送出感谢: 2 次
接收感谢: 121 次

Re: shell,bash,终端的区别

#4

帖子 taohunter » 2013-04-01 18:49

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

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

学概念的时候最好表述严密些,概念一旦错误,也许会影响你以后某些操作的结果,最坏的情况可能会把系统搞趴下。。。
这些用户感谢了作者 taohunter 于这个帖子:
bcxhzj (2014-04-04 22:35)
评价: 3.7%
16.04-->14.04
头像
自由建客
论坛版主
帖子: 13436
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64
来自: freebuilder@yeah.net
送出感谢: 12 次
接收感谢: 112 次
联系:

Re: shell,bash,终端的区别

#5

帖子 自由建客 » 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 便是其一。
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
送出感谢: 1 次
接收感谢: 89 次
联系:

Re: shell,bash,终端的区别

#6

帖子 cuihao » 2013-04-01 21:57

:em01 就按LZ那样理解就成。
又不是编撰辞海的,抠那么细干甚。
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
taohunter
帖子: 1554
注册时间: 2012-03-31 3:29
送出感谢: 2 次
接收感谢: 121 次

Re: shell,bash,终端的区别

#7

帖子 taohunter » 2013-04-01 22:30

cuihao 写了::em01 就按LZ那样理解就成。
又不是编撰辞海的,抠那么细干甚。
一个作为外部设备存在的“终端”会"承载"shell么?如果一台设定好的linux机器不连接任何终端照样有kernel和shell在运行,例如只提供web访问服务,那么这时是谁在“承载”shell,总不会web应用直接去和kernel打交道了吧?如果我没理解错,人家楼主本身就是在问一个概念性的问题,所以才不厌其烦给他说明一下。你自己一直持有的恐怕也是完全错误的概念,就别不懂装懂啦。。。
16.04-->14.04
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
送出感谢: 1 次
接收感谢: 89 次
联系:

Re: shell,bash,终端的区别

#8

帖子 cuihao » 2013-04-02 8:11

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

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

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

至于web应用的例子,我不认为程序非得通过shell和内核交互,我确实认为“程序是可以直接和系统内核打交道的”。shell 本身应该就是一种应用程序,不需要通过 shell 来和系统内核打交道(唔,这个例子貌似奇葩了点)。
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
头像
百草谷居士
帖子: 2963
注册时间: 2006-02-10 16:36
系统: ubuntu18.04/Win10
送出感谢: 18 次
接收感谢: 31 次
联系:

Re: shell,bash,终端的区别

#9

帖子 百草谷居士 » 2013-04-02 9:38

真有意思!终端不就是提供人机交互的设备吗?
友帮拓,真难听。有没有接触官方的老大?给改了吧!
一直想找一个在linux下的Visual FoxPro/access桌面数据库。MUIBase还算是最相近的。
taohunter
帖子: 1554
注册时间: 2012-03-31 3:29
送出感谢: 2 次
接收感谢: 121 次

Re: shell,bash,终端的区别

#10

帖子 taohunter » 2013-04-02 17:43

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

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

如果你愿意把shell理解成”应用程序“,虽然对我学习的操作系统/应用程序的概念有点“颠覆”,但还是你的权力。。。
16.04-->14.04
HAPPYJACKLEE
帖子: 6
注册时间: 2013-03-14 17:55
系统: ubuntu 12.04
送出感谢: 0
接收感谢: 0

Re: shell,bash,终端的区别

#11

帖子 HAPPYJACKLEE » 2013-04-02 18:20

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

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

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


你说的很好,谢谢。
我说的终端就是 ctrl + alt +T 出来的那个,还有 ctrl+alt+(F1~F6)那个
头像
懒蜗牛Gentoo
论坛版主
帖子: 7293
注册时间: 2007-03-02 17:36
送出感谢: 0
接收感谢: 96 次

Re: shell,bash,终端的区别

#12

帖子 懒蜗牛Gentoo » 2013-04-02 21:25

可以参见我签名第六章
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
rickqin
帖子: 1
注册时间: 2013-11-09 17:23
系统: Ubuntu 12.04 LTS Srv
送出感谢: 0
接收感谢: 0

Re: shell,bash,终端的区别

#13

帖子 rickqin » 2017-08-04 11:25

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

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

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

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

回到 “老旧版本支持”