[Linux] Shell 命令及運行原理


在 Linux中學到 Shell 應該是每個學習進階系統系統人都必須要系統了解的基礎課題。作為操作系統進行操控的主要接口,知道 Shell 為什么能運行命令,以及其內部原理,對于報錯調試和系統深入了解尤為重要。
本文將通過主要兩個部分介紹 Shell 的基礎知識和命令執行的原理流程。
1. 什么是 Shell?
Shell 是 Linux 和 Unix 系統中的 命令行解釋器,調用用戶輸入的命令來與操作系統核心進行交互。
- 進入 Shell 就像進入一個為您開放的環境,你可以在這里輸入指令。
- Shell 能夠識別命令,解釋為可執行的代碼,然后通過系統調用為你進行實現。
常見的 Shell 系統
- Bash – 最常用的 Shell,默認的 Linux Shell;
- Zsh – 增強了 Bash 功能,配置性很強。
- Fish – 一個主要在美觀和友好性方面做了優化的 Shell;
- Sh – Unix 原生的一種 Shell。
2. Shell 命令的運行原理
在 Shell 中輸入命令后,一個命令會經歷一系列流程來執行:
流程圖
用戶輸入命令
↓
Shell 解析命令(變量替換、通配符展開等)
↓
查找命令(內置、外部或自定義腳本)
↓
添加命令到子進程中,fork 和 exec
↓
運行命令,返回結果,顯示于終端
對于 外部命令,運行過程更加詳細:
- Shell 程序通過 fork 調用創建一個新的子進程;
- 子進程通過 exec 調用加載命令對應的執行文件;
- Shell 等待子進程運行完成,返回選擇狀態和輸出結果。
3. Shell 命令分解步驟
以輸入一條命令為例:
ls -l /home/user
分解步驟:
- 解析
- Shell 分解命令,被分成 ls(命令名),
-l(選項),以及/home/user(參數)。
- Shell 分解命令,被分成 ls(命令名),
- 變量替換
- 如果有變量,進行替換。
- 查找命令
- Shell 通過
PATH環境變量查找ls命令在文件系統中的位置。
- Shell 通過
- fork
- Shell 通過
fork()創建子進程。
- Shell 通過
- exec
- 子進程通過
exec()加載/bin/ls實現進程執行。
- 子進程通過
- 返回結果
- 命令執行結果顯示在終端上。
4. 總結
Shell 在操作系統中起著課程解釋和命令執行的重要作用,其原理根據以下步驟運行:
- 輸入解析
- 查找命令
- fork 和 exec 執行命令
- 結果顯示
深入了解這個流程,可以在命令行上可以更好地調試和解決問題。


本文來自博客園,作者:DevKevin,轉載請注明原文鏈接:http://www.rzrgm.cn/kevinbee/p/18678199

浙公網安備 33010602011771號