如果没有 CLI 和 shell 会发生什么?

如果没有 CLI 和 shell 会发生什么?

我可以说 shell 是 CLI 的一个功能,它是命令行解释器吗?

没有任何 shell 我们会遇到很多问题,但使用 OS 是可行的。例如,ls应该使用 i/usr/bin/ls /full/path/to/current/place/

如果没有 CLI,这是不可能的,因为用户没有任何界面可以与内核对话来完成他们的工作?

请解释一下 shell 和 CLI 之间的区别,以回答这个问题

答案1

界面与外壳

关于什么是命令行界面,什么是 Shell,有很多困惑。正如评论中提到的,凡是带有“界面”一词的,都是想法或理论。当你听到“界面”这个词时,想想“与计算机通信的想法”。界面可以是两台计算机之间的,比如以太网电缆,也可以是两台计算机之间的计算机和用户

Shell 就是将理论付诸实践。CLI 表示用户通过文本与计算机交互,而 shell 正是这样做的。图形用户界面表示“用户通过按钮和图标交互”,GNOME 或 Unity 提供这种交互。shell 实际上是软件的一部分,是用户可以用来与计算机交互的一些对象。“界面”只是提出了这种交互应该如何发生的想法。如今,它们可以互换使用,“CLI”和“Shell”已成为同义词。

过去,当计算机使用卷纸打印信息时,命令行界面是唯一的想法。例如,请看这个视频:https://www.youtube.com/watch?v=qv5b1Xowxdk 当然没有像 bash 或 ksh 这样的 shell,但是有最小的 shell 可以读取用户命令并处理它们。

如果没有 CLI 和 shell 会发生什么?

想一想:我们为什么需要 shell?为了用户交互!如果不需要用户交互呢?那就不需要 shell。洗衣机、无线打印机、咖啡机就是一个很好的例子。这些设备已经运行 Linux 内核,但不需要通过文本与用户交互。我们需要感知按钮按下以及压力和电压变化。所以不需要 shell/命令行界面。然而,仍然可以通过巧妙的工程/黑客技术获得它:https://www.youtube.com/watch?v=h5PRvBpLuJs

想想微控制器芯片。例如,我曾使用过 PIC18 芯片。这些芯片只是放在电路板上,永远运行 C 代码。实际上不需要读取命令。但对于我的项目,我已将该芯片与 Raspberry Pi 连接起来,并向其发送 A、B、C 等文本字符。这就是用户交互!您可能会说这是与设备通信的最小外壳。

无壳通信

从技术上讲,当您使用 shell 时,您并不是直接与内核通信。Shell 可能会代表您进行系统调用。理论上,您可以通过用 C 语言编译和插入内核模块来与内核通信,而无需使用 shell,但这样做效率极低且耗时。

答案2

我认为,您所理解的“shell”是指您与机器交互的界面,无论是终端、图形界面还是某种直接的脑机连接。更准确地说,“shell”是与硬件交互的程序( 、shbashX11、Gnome、KDE、BrainLink 3.2 等),以便您与机器交互。

同时,CLI(即命令行界面)是一种 shell,它允许你访问系统的命令行(因此有界面)。

正如您所发现的,并非所有 shell 都以相同的方式构建。有些 shell 提供图形(如 X11/Unity),而有些 shell 仅提供终端访问,如普通的 TTY。即使在这种情况下,这些 shell 也可能因运行它们的程序而有所不同。例如,shell/bin/sh相对简单,提供基本的 CLI,而/bin/bash提供远的功能更强大。从技术上讲,它们仍然是 shell,就像一些非常简单的程序,只需调用exec()您传递给它的任何内容即可。

即使没有 CLI,您的系统仍然可以 100% 有用。以 Windows 或 macOS 为例。这两个系统实际上都不需要 CLI(我相信如果可以的话他们会完全删除它),但系统仍然非常实用。

但请记住,每一个系统有可用的命令行,但并非每个系统都有可供您使用的命令行界面。另一方面,shell(图形或控制台)对于您能够与机器交互以运行任意程序是必需的。例如,您的基于 Linux 的智能电视在技术上是一个“shell”,因为它可以启动任意应用程序,但您的停车计费器也运行嵌入式 Linux,因此不需要面向公众(甚至面向私人)的 shell。

答案3

Shell 是程序员经常使用的一种功能,用于从其应用程序内部调用外部程序。通常可以在 CLI 中输入相同的程序。执行此操作时可称为“shelling out”。外部程序的输出通常会重定向到工作文件,当“shelled”程序完成时,调用程序会打开该文件。

我每天使用的一个简单场景是从 Libre Office Calc 内部运行一百个 bash 命令并将输出存储在电子表格中。

相关内容