當我們執行一條命令的時候,整個命令執行流程如下:
1、判斷路徑
判斷使用者是否以絕對路徑或相對路徑的方式輸入命令(如/bin/ls),如果是的話,直接執行。
2、檢查別名
linux 系統會檢查使用者輸入的命令是否為「別名命令」。要知道,通過 alias 命令是可以給現有命令自定義別名的,即用乙個自定義的命令名稱來替換原本的命令名稱。
3、判斷使用者輸入的是內部命令還是外部命令
linux命令列直譯器(又稱為 shell)會判斷使用者輸入的命令是內部命令還是外部命令。其中,內部命令指的是直譯器內部的命令,會被直接執行;而使用者通常輸入的命令都是外部命令。
內部命令: shell 自帶,會隨著系統啟動,可以直接從記憶體中讀取
外部命令:在系統path變數的某個路徑下的可執行檔案
判斷乙個命令屬於內部命令還是外部命令,可以使用 type 命令檢視。
4、內部命令直接執行,外部命令檢測是否存在快取
5、檢測path路徑,有執行,無報錯。
當使用者執行的是外部命令時,系統會在指定的多個路徑中查詢該命令的可執行檔案,而定義這些路徑的變數,就稱為 path 環境變數,其作用就是告訴 shell 待執行命令的可執行檔案可能存放的位置,也就是說,shell 會在 path 變數包含的多個路徑中逐個查詢,直到找到為止(如果找不到,shell 會提供使用者「找不到此命令」)。
事實上執行過的外面命令都會儲存在內部快取中,當再次執行相同的命令,會通過快取調取執行,也就意味著不會搜尋path路徑。
總結,當我們執行乙個ping命令之後,整個命令執行的流程步驟如下:
1.檢查執行的是否是絕對路徑執行
2.檢查ping命令是否存在別名
3.檢查ping命令是內部命令還是外部命令
4.如果是內部命令直接執行
5.如果是外部命令,檢查ping命令是否有快取,如果沒有,查詢path變數
6.檢查path路徑直到查詢到該命令然後執行
7.如果沒有找到該命令則返回錯誤,command not found。
shell中命令的執行流程
在shell中,乙個命令有3中寫法 1 可以直接寫 normal command 2 可以放在雙引號中 command 3 可以放在單引號中 comand 這3中寫法,命令的執行流程也是不一樣的,如下圖所示 由pipe characte 分割command shell指令碼中,每一行文字稱為乙個pi...
shell中命令的執行流程
在shell中,乙個命令有3中寫法 1 可以直接寫 normal command 2 可以放在雙引號中 command 3 可以放在單引號中 comand 這3中寫法,命令的執行流程也是不一樣的,如下圖所示 由pipe characte 分割command shell指令碼中,每一行文字稱為乙個pi...
執行linux命令,cmd命令
exec dir output print r output exec 函式解析 exec 語法 string exec string command,string array int return var exec 返回值 字串 exec 引數說明 command 需要執行的命令 array 是輸...