终端和shell是一样的吗?

我知道这可能听起来很愚蠢,但我只想知道Linux世界中使用的两个单词之间是否真的存在差异。 我知道Shell是一个命令行界面,有许多变种,如Bash,Korn等。我也知道Ctrl + Alt + T在Ubuntu上启动一个终端。 我只是想连接这两个点。

这是否意味着终端是打开的窗口,shell是后面运行的程序来解释窗口中键入的命令? 或者它们是否相同,其中终端是用于抽象Shell等概念的通用术语?

什么是两个词的确切区别?

终端模拟器(通常只称为终端)是“只是窗口”,是的。 它运行一个基于文本的程序,默认情况下是你的登录shell(在Ubuntu中是bash)。 当您在窗口中键入字符时,除了将它们发送到shell(或其他程序的)stdin之外,终端还会在窗口中绘制这些字符。 shell输出到stdout和stderr的字符被发送到终端,终端又在窗口中绘制这些字符。

所以,是的,shell和终端模拟器是完全独立的程序,并且可以在没有其他程序的情况下使用。

我认为在Unix和Linux stackexchange网站上已经对这个问题进行了彻底的探讨: shell,console和终端之间的区别

是的,终端模拟器和shell是两个不同的程序。 如您所知,不同的一个例子是启动终端窗口可以根据您配置的内容运行不同的shell(bash,tcsh,ksh,ash,甚至python!)。

另一个区别是终端仿真器不仅仅是默认的:gnome-terminal,xterm,konsole(KDE)等多种类型(参见: http : //www.howtogeek.com/howto/ubuntu/set-) -default-terminal-emulator-on-ubuntu-linux / )。 任何shell都可以在任何这些终端仿真器中运行,没有太大困难。

第三个区别是,除了运行shell命令之外,您还可以在终端仿真器中启动某些交互式应用程序,它们将在同一窗口中运行(并且仍依赖于相同的终端仿真器程序来处理实际图形),例如vim文本编辑器,nethack RPG等。 如果您愿意,可以在终端模拟器中设置配置文件,以便在打开新选项卡时自动启动nethack; 没有shell涉及,但终端模拟器仍然是相同的程序。

第四个区别是您可以在终端窗口内使用ssh等程序执行远程登录。 在这种情况下,您的shell(或您远程运行的任何程序)正在另一台计算机上运行,​​并且ssh程序将其连接到处理图形的计算机上运行的本地终端仿真器程序。