我发现自己在不知道差异的情况下可以互换使用这些术语。
所有这些术语之间的实际差异是什么?
答案 0 :(得分:21)
是的,这些条款存在很多混淆。我会给它一个刺,但附带条件是这真的是语义,这些术语在日常用语中互换使用:
“Shell”是用于运行其他程序的任何程序的术语。它包裹着另一个程序,因此它的名字。因此,例如,Windows资源管理器是一个shell,即使很少有人会称它为一个。在我使用的所有语言和平台中,任何程序都可以是shell。
编辑:我没有定义“终端”。它的名字来自与用户沟通的终点。具体来说,它是用于最终用户通信的打字机设备。今天它更为通用,可能意味着伪终端(Linuxps -ef
中的pts),这是一个由GUI管理的基于字符的会话。在Windows上,这将被称为“控制台窗口”。
“控制台”在Windows和UNIX上是指特定但不同的内容。在UNIX上最初是tty(TeleTYpewriter,VDU是一个“玻璃电传打字机”),它被物理地插入到机器中,甚至不通过加密狗(我在UNIX上走了很长一段路)。它是发送和接收启动和关闭消息的终端,以及诸如PANIC之类的警报。 bash和Korn shell脚本都可以在没有TTY /控制台的情况下作为伪守护进程运行。
术语“控制台”经常与更准确的“标准输入”,“标准输出”和“标准错误”(stdin,stdout,stderr,来自C)相混淆。这些有时被称为流,并且默认为在大多数系统上被引导到终端。在UNIX上,它们是前三个文件描述符,在Windows上是前三个文件句柄,两者都是0,1,2。程序可以将这些文件引导到它具有适当访问权限的任何文件系统,但通常它不会 - 它通常从其父进程继承它们(并非过去所有操作系统都这样做)。
在Windows上,“控制台”程序是一个具有控制台窗口的程序,通常被错误地称为“DOS框”。因此,cmd.exe是一个控制台程序,但perl.exe也是如此,python.exe也是如此(但不是pythonw.exe)。
命令提示符是键入的邀请,由命令行解释程序或CLI显示。按照UNIX上的惯例,它以除root之外的所有用户结束$,以#结尾。 csh不遵循此约定并使用%。通常,Windows CLI上的提示以>结尾。在所有情况下,这些都可以由用户更改。
我认为Windows上cmd.exe的快捷方式和窗口标题具有“命令提示符”标签,因为它可以访问命令提示符。我有一本名为“Windows命令行”的Microsoft Press书,上面写着“命令行是......通过命令shell窗口访问的”。所以即使是微软也会混淆他们
因此,cmd.exe是一个shell,一个CLI和一个控制台程序。 sqlplus是一个CLI而不是一个shell,在Windows上它是一个控制台程序。 Windows资源管理器是一个shell,但不是CLI或控制台程序。 Bash和Korn shell都是具有CLI的shell,可以从控制台运行,但不仅限于此。