[英]How shell commands execute
我是新手,正在尋找一些信息。
提前致謝。
echo“ Hello World!”和有什么不一樣? 和一個打印“ Hello World!”的C程序 使用printf。
Shell命令如何執行。 例如,如果我給ls
它列出目錄中的所有文件。 當我們在shell中輸入ls
時,是否有運行的可執行二進制文件。
請讓我知道你們是否有任何鏈接或消息來源以澄清這一點。
Shell可以執行兩種主要的“命令”類型。 內置命令由外殼程序本身執行-不啟動新程序。 只需在shell提示符下鍵入echo
就是這種內置命令的示例。
另一方面,其他命令執行外部程序(也稱為二進制文件),而ls
是此類命令的示例。
因此,如果在外殼程序中運行echo
,它是由外殼程序本身執行的,但是,如果編寫執行相同操作的C程序,它將作為外部程序運行。 實際上,大多數Linux系統都帶有這樣的二進制文件,位於/bin/echo
。
為什么有時同時具有內置命令和程序來完成相同任務是有意義的? 內置命令的執行速度更快,因為運行外部程序會涉及一些成本。 但是內置函數也有一些缺點:它們不能太復雜,因為這會使外殼變大和變慢。 它們不能獨立於外殼和彼此升級; 最后,在某些情況下,不是您的外殼程序的外部程序想要運行應用程序:它可以運行外部程序,但是由於它不是外殼程序,因此不能直接執行外殼程序內置程序。 因此有時同時兼顧兩者都是有意義的。 除了echo
之外, time
是這種雙重方法的另一個示例。
Shell只是與操作系統或內核進行交互的用戶級方式。 這就是它被稱為shell的原因之一。 Shell本身( sh
, csh
, tcsh
, ksh
, zsh
, bash
等)本質上只是一個二進制文件,操作系統將執行該二進制文件以允許您執行其他二進制文件。
它通常提供許多其他功能,例如內置函數( echo
, fg
, jobs
等),解釋語言( for x in ...
, if then
等),命令歷史記錄和等等...
因此,任何輸入到外殼程序中的文本(如echo
),二進制文件(或進程)都會在其代碼中解釋並運行相應的功能。 內置函數(例如echo
)不需要創建新進程,但是如果文本被解釋為執行二進制文件( vim
, emacs
, gcc
, test
, true
, false
等)的請求,會為此創建一個新進程(除非您給它加上exec
前綴)並執行它。
因此, echo "Hello World!
只是在外殼程序(進程)中運行代碼printf("Hello World!")
將使用單獨的二進制文件,外殼程序將為( fork
)創建一個新進程,並讓操作系統執行( exec
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.