【问题标题】:How shell commands executeshell 命令如何执行
【发布时间】:2015-01-03 12:51:26
【问题描述】:

我是新手,正在寻找一些信息。

提前致谢。

  1. echo "Hello World!" 有什么区别?和一个打印“Hello World!”的 c 程序。使用 printf。

  2. 如何执行 shell 命令。例如,如果我给 ls 它会列出目录中的所有文件。当我们在 shell 中输入ls 时,是否有可执行的二进制文件运行。

如果你们有任何链接或来源可以弄清楚这一点,请告诉我。

【问题讨论】:

    标签: c linux bash shell command-line


    【解决方案1】:

    shell 只是与操作系统或内核交互的用户级方式。这就是它被称为 shell 的原因之一。 shell 本身(shcshtcshkshzshbash 等)本质上只是操作系统执行的二进制文件,以允许您执行其他二进制文件。

    它通常提供许多其他功能,例如内置函数(echofgjobs 等)、解释语言(for x in ...if then 等。 .)、命令历史记录等...

    因此,任何输入到 shell 中的文本(如echo),二进制文件(或进程)都会解释并运行其代码中的相应函数。内置函数(如echo)不需要创建新进程,但如果文本被解释为执行二进制的请求(vimemacsgcctest、@ 987654338@、false 等...)shell 将为它创建一个新进程(除非你在它前面加上exec)并执行它。

    所以,echo "Hello World! 只是在 shell(进程)中运行代码。 printf("Hello World!") 将是单独的二进制文件,shell 将为 (fork) 创建一个新进程,并让操作系统执行 (exec)。

    【讨论】:

      【解决方案2】:

      shell 可以执行两种主要类型的“命令”。内置命令由 shell 本身执行 - 不启动新程序。只需在 shell 提示符下键入 echo 就是这种内置命令的一个示例。

      另一方面,其他命令执行外部程序(也称为二进制文件)-ls 就是此类命令的一个示例。

      所以,如果你在 shell 中运行echo,它会由 shell 本身执行,但如果你编写一个执行相同操作的 C 程序,它将作为外部程序运行。事实上,大多数 Linux 系统都带有这样的二进制文件,位于 /bin/echo

      为什么有时同时使用内置命令和程序来完成相同的任务是有意义的?内置命令的执行速度更快,因为运行外部程序需要一些成本。但是内置也有一些缺点:它们不能太复杂,因为这会使 shell 变得又大又慢;它们不能与外壳分开升级,也不能相互升级;最后,在某些情况下,不是您的 shell 的外部程序想要运行应用程序:它可以运行外部程序但不能直接执行 shell 内置程序,因为它不是 shell。所以有时两者兼而有之是有意义的。除了echotime 是这种双重方法的另一个例子。

      【讨论】:

      • 为了补充这个很好的解释,调用ls(或任何其他二进制文件)时使用的实际二进制文件由which ls返回。并且.. 要了解有关二进制文件的更多信息,您始终拥有man ls
      • 在 bash 中,type lswhich ls 更有意义
      • 感谢 Michal 的解释:D
      • 我相信cd 是一个比echo 更有用的shell 内置示例。因为cd 必须是内置的。但echosome shell 中可能是 /bin/echo。另见this answer
      猜你喜欢
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2013-01-05
      相关资源
      最近更新 更多