Linux & Shell - Shell 是必须的吗?

8 linux bash shell

为什么我们在 Linux 中需要一个 shell?作为一个例子,当我输入时,find . -name xy\* 我被告知 shell 接受这个输入并调用 find 命令(确保正确解释通配符等等)。没有外壳的概念就不能做到这一点......?如果 shell 跟踪各种进程,没有它就不能完成吗?

另外,为什么我可以输入>ls xy*并获得正确的输出,而我需要*使用\in find -进行转义find . -name xy\\*?shell 是否为一个而不是另一个可执行文件进行通配符扩展?

moo*_*dow 23

如果没有外壳的概念,这不能完成吗?

嗯,不。您需要能够解释您的意图并调用适当程序的东西。那个东西叫做壳。

编辑:为避免混淆,“shell”并不意味着“命令行界面”。来自http://en.wikipedia.org/wiki/Shell_(computing)

“操作系统外壳通常分为两类之一:命令行和图形。命令行外壳为操作系统提供命令行界面 (CLI),而图形外壳提供图形用户界面 (GUI)。在任一类别 shell 的主要目的是调用或“启动”另一个程序;然而,shell 经常具有附加功能,例如查看目录的内容。

至于您的另一个问题,shell 正在为这两个命令进行通配符扩展,但是当您使用 find 搜索文件时,您要查找而不是 shell 来进行扩展,因为您希望它在查找的位置完成在而不是在调用它的位置;因此,您转义 * 以停止外壳扩展它,以便 find 可以看到它。

  • @Paul:资源管理器,提供开始按钮的程序是 windows shell。实际上,它是*a* Windows shell;它可以被替换。 (12认同)
  • 这不是一种常见的用法,但 GUI 可以说是 shell(至少如果它们在内核之外运行的话)。开始按钮只是 GUI 的一个功能... (6认同)

Iva*_*ica 5

您当然可以通过 GUI 完成所有操作。Windows 的“查找文件”(来自 XP 和更早版本)与您键入的命令有些类似 GUIsh。

现在,为什么 UNIX(和 Linux)用户喜欢 shell?因为您可以获取输出,将其输入到另一个程序中,并获得不同的输出。例如:

find | grep burek
Run Code Online (Sandbox Code Playgroud)

这是两个命令,findgrep,一个喂另一个。find列出当前文件夹和所有子文件夹中的所有文件,每行一个,并grep仅打印出包含burek.

现在,还有其他更复杂的事情,例如:

ls -R | sort | uniq
Run Code Online (Sandbox Code Playgroud)

ls -R列出当前文件夹和子文件夹中的文件,并对sort输出进行排序。uniq然后只给我们独特的线条。

现在,虽然您可以将所有这些都编码到 GUI 中,但您可以使用命令行快速完成一些通常用 GUI 无法完成的棘手事情,除非您自己编写。在这种情况下,直接在命令行中输入它会更快,不是吗?

底线:如果你问这个,你就不需要它。作为普通用户,命令行对您毫无用处。然而,命令行对于系统管理员、开发人员以及那些想要以快速快速的方式处理计算机的人来说非常有用。