【Linux】Linux系統(tǒng)編程——Linux命令解析器
什么是Linux 命令解析器?
Linux 命令解析器,通常被稱為 shell,是 Linux 操作系統(tǒng)中的一個(gè)關(guān)鍵組件。它充當(dāng)用戶和系統(tǒng)內(nèi)核之間的接口,允許用戶通過輸入命令來控制和管理操作系統(tǒng)和應(yīng)用程序。
命令解析器的作用與基本原理
Linux系統(tǒng)結(jié)構(gòu)簡(jiǎn)介
這張圖是 Linux 系統(tǒng)結(jié)構(gòu)的一個(gè)簡(jiǎn)化表示,展示了不同組成部分之間的層次關(guān)系。從內(nèi)到外,各層次代表了系統(tǒng)的不同部分:
-
內(nèi)核:位于最中心的是 Linux 系統(tǒng)的核心。內(nèi)核是操作系統(tǒng)的心臟,負(fù)責(zé)管理硬件資源,以及進(jìn)程、內(nèi)存、文件系統(tǒng)的控制等。
-
內(nèi)核空間:緊接著內(nèi)核的是內(nèi)核空間,這是指那些直接運(yùn)行在內(nèi)核權(quán)限下的程序或內(nèi)核模塊的空間。在這個(gè)層次上,代碼能夠直接訪問硬件和內(nèi)存等資源。
-
shell層:離內(nèi)核更遠(yuǎn)一些的是 shell 層。這個(gè)層次代表了系統(tǒng)中的命令解析器,也就是前面解釋過的 shell,它為用戶提供了一個(gè)與系統(tǒng)交互的界面。
-
應(yīng)用層:最外層是應(yīng)用層,代表運(yùn)行在用戶空間的各種應(yīng)用程序。這些程序通過系統(tǒng)調(diào)用與內(nèi)核進(jìn)行交云,并通過 shell 與用戶進(jìn)行交互。
-
用戶:在最外層,表示操作系統(tǒng)的用戶,他們通過應(yīng)用程序和 shell 與系統(tǒng)互動(dòng)。
整個(gè)圖表示了操作系統(tǒng)的“圈層模型”,其中最內(nèi)層是最底層的系統(tǒng)組件,負(fù)責(zé)直接與硬件交互,而向外層逐漸過渡到用戶空間和應(yīng)用程序。這種模型有助于保護(hù)系統(tǒng)的安全,因?yàn)樗拗屏藢?duì)核心系統(tǒng)組件的直接訪問。只有經(jīng)過適當(dāng)?shù)臋?quán)限和系統(tǒng)調(diào)用,外層的應(yīng)用程序和用戶才能與內(nèi)核層的組件交互。
作用
-
命令解釋器:用戶通過 shell 輸入命令,shell 解釋這些命令并將其轉(zhuǎn)換為內(nèi)核能理解的指令。例如,當(dāng)用戶輸入文件管理命令(如
ls
,cp
,mv
)時(shí),shell 解釋這些命令并將它們傳遞給內(nèi)核執(zhí)行。 -
程序啟動(dòng)器:用戶可以通過 shell 啟動(dòng)應(yīng)用程序。用戶輸入程序名后,shell 會(huì)在系統(tǒng)中查找這個(gè)程序并啟動(dòng)它。
-
用戶界面:shell 提供了一個(gè)用戶與操作系統(tǒng)交互的界面,既可以是命令行界面(CLI),也可以是圖形界面(通過腳本實(shí)現(xiàn))。
-
腳本執(zhí)行:shell 腳本是一系列的命令集合,它們被保存在文件中以供以后執(zhí)行。shell 可以執(zhí)行這些腳本,使得自動(dòng)化復(fù)雜的任務(wù)變得可能。
-
環(huán)境管理:shell 管理著用戶的工作環(huán)境,包括環(huán)境變量、當(dāng)前工作目錄、用戶權(quán)限等。
-
輸入/輸出重定向:shell 允許用戶將命令的輸出重定向到文件中,或者從文件中讀取輸入。
基本原理
shell就是用戶與系統(tǒng)內(nèi)核之間的一個(gè)橋梁,基本原理是用戶在終端輸入命令, 由shell命令解析器對(duì)命令進(jìn)行解析(按照$PATH環(huán)境變量搜索命令), 解析成內(nèi)核能夠識(shí)別的指令, 然后由內(nèi)核執(zhí)行命令, 最后由終端顯示命令執(zhí)行的結(jié)果給用戶。
注意:shell在尋找命令的時(shí)候是按照$PATH環(huán)境變量去查找的,如果找到了就執(zhí)行對(duì)應(yīng)的命令,若找不到就報(bào)錯(cuò), 執(zhí)行echo $PATH可以查看PATH環(huán)境變量的值.
以下是 shell 工作的基本步驟和機(jī)制:
-
命令輸入:
- 用戶在命令行界面輸入命令。
- 這些命令可以是簡(jiǎn)單的單個(gè)命令、一連串的命令(使用管道
|
連接)、或者是復(fù)雜的腳本。
-
命令解析:
- Shell 讀取輸入的命令并進(jìn)行解析。
- 它會(huì)檢查語法并將命令分解為基本的組成部分,如命令名、選項(xiàng)和參數(shù)。
-
變量和文件名展開:
- Shell 會(huì)展開命令行中的變量到它們的值。
- 它還會(huì)對(duì)文件名進(jìn)行通配符匹配,如將
*.txt
展開為當(dāng)前目錄下所有以.txt
結(jié)尾的文件名。
-
命令執(zhí)行:
- 解析后的命令被傳遞給操作系統(tǒng)。
- Shell 會(huì)查找命令的可執(zhí)行文件,并啟動(dòng)一個(gè)新的進(jìn)程來運(yùn)行該命令。
- 如果命令是內(nèi)建命令(shell 內(nèi)部提供的命令,如
cd
),shell 會(huì)直接執(zhí)行而不是啟動(dòng)新的進(jìn)程。
-
輸入/輸出重定向:
- 在執(zhí)行命令之前,shell 可以根據(jù)需要重新分配標(biāo)準(zhǔn)輸入、輸出和錯(cuò)誤流。
- 用戶可以使用重定向操作符,如
>
、<
或>>
,來指定輸出應(yīng)該被寫入到文件或從文件讀取輸入。
-
管道:
- Shell 允許使用管道將多個(gè)命令鏈接起來。
- 管道操作符
|
用于將一個(gè)命令的輸出作為下一個(gè)命令的輸入。
-
命令執(zhí)行反饋:
- 一旦命令執(zhí)行完成,shell 會(huì)返回狀態(tài)碼給用戶。
- 狀態(tài)碼通常表示命令是否成功執(zhí)行(通常用 0 表示成功,非 0 值表示錯(cuò)誤或異常)。
-
控制流:
- Shell 腳本可以包含控制流結(jié)構(gòu),比如循環(huán)(
for
,while
)、條件判斷(if
,case
)和函數(shù)。 - 這些結(jié)構(gòu)控制腳本的執(zhí)行流程。
- Shell 腳本可以包含控制流結(jié)構(gòu),比如循環(huán)(
-
信號(hào)處理:
- Shell 能夠處理來自操作系統(tǒng)的信號(hào),比如用戶按下 Ctrl+C 發(fā)出的中斷信號(hào)。
- 它可以根據(jù)信號(hào)執(zhí)行特定的操作,例如終止當(dāng)前運(yùn)行的命令。
-
環(huán)境管理:
- Shell 管理著一個(gè)環(huán)境,這個(gè)環(huán)境包括了定義了用戶工作環(huán)境的環(huán)境變量。
- 環(huán)境變量可以被腳本和程序用來獲取有關(guān)系統(tǒng)的信息。
常用的命令解析器
常用的命令解析器主要有以下幾種:
-
Bash:Bash是Linux上最常用的命令解析器,它是Bourne-Again SHell的縮寫。支持命令行歷史記錄、自動(dòng)補(bǔ)全、別名、管道等。
-
Bourne Shell:Bourne Shell是Linux系統(tǒng)默認(rèn)的shell,它是最早的一種shell,也是最基礎(chǔ)的一種。在Linux系統(tǒng)中,當(dāng)我們輸入用戶名和密碼登陸之后,我們就開始執(zhí)行一個(gè)shell解釋器程序,通常是/bin/bash,當(dāng)然也可以是別的,比如/bin/sh。
-
C Shell (csh):C Shell是另一種常用的Unix shell,它是由Bill Joy在Bourne Shell的基礎(chǔ)上開發(fā)的,提供了一些Bourne Shell沒有的特性,如命令補(bǔ)全、歷史命令、作業(yè)控制等。
-
Korn Shell (ksh):Korn Shell是在Bourne Shell的基礎(chǔ)上發(fā)展起來的,它的設(shè)計(jì)目標(biāo)是提供Bourne Shell的所有功能,并增加一些新的特性,如命令補(bǔ)全、歷史命令、作業(yè)控制等。它是一種非常流行的Unix shell,廣泛應(yīng)用于各種Unix系統(tǒng)中。
-
Tcsh:Tcsh是在Korn Shell的基礎(chǔ)上發(fā)展起來的,它的設(shè)計(jì)目標(biāo)是提供Bourne Shell和Korn Shell的所有功能,并增加一些新的特性,如命令補(bǔ)全、歷史命令、作業(yè)控制等。它是一種非常流行的Unix shell,廣泛應(yīng)用于各種Unix系統(tǒng)中。
-
Windows PowerShell:Windows PowerShell是微軟的.NET Framework技術(shù)的Windows NT系統(tǒng)中的一種命令解析器,它提供了強(qiáng)大的命令行操作功能,支持.NET Framework技術(shù),可以方便地進(jìn)行腳本編程[3]。文章來源:http://www.zghlxwxcb.cn/news/detail-784576.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-784576.html
到了這里,關(guān)于【Linux】Linux系統(tǒng)編程——Linux命令解析器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!