簡體   English   中英

Shell命令如何執行

[英]How shell commands execute

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

提前致謝。

  1. echo“ Hello World!”和有什么不一樣? 和一個打印“ Hello World!”的C程序 使用printf。

  2. Shell命令如何執行。 例如,如果我給ls它列出目錄中的所有文件。 當我們在shell中輸入ls時,是否有運行的可執行二進制文件。

請讓我知道你們是否有任何鏈接或消息來源以澄清這一點。

Shell可以執行兩種主要的“命令”類型。 內置命令由外殼程序本身執行-不啟動新程序。 只需在shell提示符下鍵入echo就是這種內置命令的示例。

另一方面,其他命令執行外部程序(也稱為二進制文件),而ls是此類命令的示例。

因此,如果在外殼程序中運行echo ,它是由外殼程序本身執行的,但是,如果編寫執行相同操作的C程序,它將作為外部程序運行。 實際上,大多數Linux系統都帶有這樣的二進制文件,位於/bin/echo

為什么有時同時具有內置命令和程序來完成相同任務是有意義的? 內置命令的執行速度更快,因為運行外部程序會涉及一些成本。 但是內置函數也有一些缺點:它們不能太復雜,因為這會使外殼變大和變慢。 它們不能獨立於外殼和彼此升級; 最后,在某些情況下,不是您的外殼程序的外部程序想要運行應用程序:它可以運行外部程序,但是由於它不是外殼程序,因此不能直接執行外殼程序內置程序。 因此有時同時兼顧兩者都是有意義的。 除了echo之外, time是這種雙重方法的另一個示例。

Shell只是與操作系統或內核進行交互的用戶級方式。 這就是它被稱為shell的原因之一。 Shell本身( shcshtcshkshzshbash等)本質上只是一個二進制文件,操作系統將執行該二進制文件以允許您執行其他二進制文件。

它通常提供許多其他功能,例如內置函數( echofgjobs等),解釋語言( for x in ...if then等),命令歷史記錄和等等...

因此,任何輸入到外殼程序中的文本(如echo ),二進制文件(或進程)都會在其代碼中解釋並運行相應的功能。 內置函數(例如echo )不需要創建新進程,但是如果文本被解釋為執行二進制文件( vimemacsgcctesttruefalse等)的請求,會為此創建一個新進程(除非您給它加上exec前綴)並執行它。

因此, echo "Hello World!只是在外殼程序(進程)中運行代碼printf("Hello World!")將使用單獨的二進制文件,外殼程序將為( fork )創建一個新進程,並讓操作系統執行( exec )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM