午夜网站国产欧美_加勒比视频亚洲无码_91亚洲人人在字幕国产_18禁止美女爆乳免费网站_被消防员c哭高h野外糙汉动漫_午夜精品视频在线无码_gogowww人体大胆裸体午液_2021自拍偷区亚洲综合第一页_国产欧美一区二区精品性色超碰_99國產精品無碼

Hi,您好,歡迎來到西安盛圖軟件科技有限公司!

一篇文章帶你了解什么是Shell

發(fā)布時間:2021-09-09 10:34:13

點擊上方藍字關注我們

一篇文章帶你了解什么是Shell

bige_0909095412_6171.png


一篇文章帶你快速理解什么是Shell

現(xiàn)在我們使用的操作系統(tǒng)(Windows、MacOS、Android、iOS等)都是帶圖形界面的,簡單直觀,容易上手,對專業(yè)用戶(程序員、網(wǎng)管等)和普通用戶(家庭主婦、老年人等)都非常適用;計算機的普及離不開圖形界面。

然而在計算機的早期并沒有圖形界面,我們只能通過一個一個地命令來控制計算機,這些命令有成百上千之多,且不說記住這些命令非常困難,每天面對沒有任何色彩的“黑屏”本身就是一件枯燥的事情;這個時候的計算機還遠遠談不上炫酷和普及,只有專業(yè)人員才能使用。

Shape1
圖:早期的電腦,都是“黑紙白字”

(如果想欣賞更多早起的計算機,可以閱讀《帶你逛西雅圖活電腦博物館》)

對于圖形界面,用戶點擊某個圖標就能啟動某個程序;對于命令行,用戶輸入某個程序的名字(可以看做一個命令)就能啟動某個程序。這兩者的基本過程都是類似的,都需要查找程序在硬盤上的安裝位置,然后將它們加載到內(nèi)存運行。

(關于程序的運行原理,請閱讀《載入內(nèi)存,讓程序運行起來》)

換句話說,圖形界面和命令行要達到的目的是一樣的,都是讓用戶控制計算機。

然而,真正能夠控制計算機硬件(CPU、內(nèi)存、顯示器等)的只有操作系統(tǒng)內(nèi)核(Kernel),圖形界面和命令行只是架設在用戶和內(nèi)核之間的一座橋梁。

(如果你不了解操作系統(tǒng)的作用,請轉(zhuǎn)到《操作系統(tǒng)是什么》)

由于安全、復雜、繁瑣等原因,用戶不能直接接觸內(nèi)核(也沒有必要),需要另外再開發(fā)一個程序,讓用戶直接使用這個程序;該程序的作用就是接收用戶的操作(點擊圖標、輸入命令),并進行簡單的處理,然后再傳遞給內(nèi)核,這樣用戶就能間接地使用操作系統(tǒng)內(nèi)核了。你看,在用戶和內(nèi)核之間增加一層“代理”,既能簡化用戶的操作,又能保障內(nèi)核的安全,何樂不為呢?

用戶界面和命令行就是這個另外開發(fā)的程序,就是這層“代理”。在Linux下,這個命令行程序叫做 Shell。

Shell是一個應用程序,它連接了用戶和Linux內(nèi)核,讓用戶能夠更加高效、安全、低成本地使用Linux內(nèi)核,這就是Shell的本質(zhì)。

Shell本身并不是內(nèi)核的一部分,它只是站在內(nèi)核的基礎上編寫的一個應用程序,它和QQ、迅雷、Firefox等其它軟件沒有什么區(qū)別。然而Shell也有著它的特殊性,就是開機立馬啟動,并呈現(xiàn)在用戶面前;用戶通過Shell來使用Linux,不啟動Shell的話,用戶就沒辦法使用Linux。


Shell是如何連接用戶和內(nèi)核的

Shell能夠接收用戶輸入的命令,并對命令進行處理,處理完畢后再將結果反饋給用戶,比如輸出到顯示器、寫入到文件等,這就是大部分讀者對Shell的認知。你看,我一直都在使用Shell,哪有使用內(nèi)核哦?我也沒有看到Shell將我和內(nèi)核連接起來呀?!

其實,Shell程序本身的功能是很弱的,比如文件操作、輸入輸出、進程管理等都得依賴內(nèi)核。我們運行一個命令,大部分情況下Shell都會去調(diào)用內(nèi)核暴露出來的接口,這就是在使用內(nèi)核,只是這個過程被Shell隱藏了起來,它自己在背后默默進行,我們看不到而已。

接口其實就是一個一個的函數(shù),使用內(nèi)核就是調(diào)用這些函數(shù)。這就是使用內(nèi)核的全部內(nèi)容了嗎?嗯,是的!除了函數(shù),你沒有別的途徑使用內(nèi)核。

比如,我們都知道在Shell中輸入catlog.txt命令就可以查看log.txt文件中的內(nèi)容,然而,log.txt放在磁盤的哪個位置?分成了幾個數(shù)據(jù)塊?在哪里開始?在哪里終止?如何操作探頭讀取它?

這些底層細節(jié)Shell統(tǒng)統(tǒng)不知道的,它只能去調(diào)用內(nèi)核提供的open()和read()函數(shù),告訴內(nèi)核我要讀取log.txt文件,請幫助我,然后內(nèi)核就乖乖地按照Shell的吩咐去讀取文件了,并將讀取到的文件內(nèi)容交給Shell,最后再由Shell呈現(xiàn)給用戶(其實呈現(xiàn)到顯示器上還得依賴內(nèi)核)。

整個過程中Shell就是一個“中間商”,它在用戶和內(nèi)核之間“倒賣”數(shù)據(jù),只是用戶不知道罷了。


Shell還能連接其它程序

在Shell中輸入的命令,有一部分是Shell本身自帶的,這叫做內(nèi)置命令;有一部分是其它的應用程序(一個程序就是一個命令),這叫做外部命令。

Shell本身支持的命令并不多,功能也有限,但是Shell可以調(diào)用其他的程序,每個程序就是一個命令,這使得Shell命令的數(shù)量可以無限擴展,其結果就是Shell的功能非常強大,完全能夠勝任Linux的日常管理工作,如文本或字符串檢索、文件的查找或創(chuàng)建、大規(guī)模軟件的自動部署、更改系統(tǒng)設置、監(jiān)控服務器性能、發(fā)送報警郵件、抓取網(wǎng)頁內(nèi)容、壓縮文件等。

更加驚訝的是,Shell還可以讓多個外部程序發(fā)生連接,在它們之間很方便地傳遞數(shù)據(jù),也就是把一個程序的輸出結果傳遞給另一個程序作為輸入。

大家所說的Shell強大,并不是Shell本身功能豐富,而是它擅長使用和組織其他的程序。Shell就是一個領導者,這正是Shell的魅力所在。


Shell也支持編程

Shell并不是簡單的堆砌命令,我們還可以在Shell中編程,這和使用 C++、C#、Java、Python 等常見的編程語言并沒有什么兩樣。

Shell雖然沒有C++、Java、Python等強大,但也支持了基本的編程元素,例如:

if...else選擇結構,case...in開關語句,for、while、until循環(huán);

變量、數(shù)組、字符串、注釋、加減乘除、邏輯運算等概念;

函數(shù),包括用戶自定義的函數(shù)和內(nèi)置函數(shù)(例如printf、export、eval等)。

站在這個角度講,Shell也是一種編程語言,它的編譯器(解釋器)是Shell這個程序。我們平時所說的Shell,有時候是指連接用戶和內(nèi)核的這個程序,有時候又是指Shell編程。

Shell主要用來開發(fā)一些實用的、自動化的小工具,而不是用來開發(fā)具有復雜業(yè)務邏輯的中大型軟件,例如檢測計算機的硬件參數(shù)、搭建Web運行環(huán)境、日志分析等,Shell都非常合適。

使用Shell的熟練程度反映了用戶對Linux的掌握程度,運維工程師、網(wǎng)絡管理員、程序員都應該學習Shell。

Linux運維.jpg

尤其是Linux運維工程師,Shell更是必不可少的,是必須掌握的技能,它使得我們能夠自動化地管理服務器集群,否則你就得一個一個地登錄所有的服務器,對每一臺服務器都進行相同的設置,而這些服務器可能有成百上千之多,會浪費大量的時間在重復性的工作上。


Shell是一種腳本語言

任何代碼最終都要被“翻譯”成二進制的形式才能在計算機中執(zhí)行。

有的編程語言,如C/C++、Pascal、Go語言、匯編等,必須在程序運行之前將所有代碼都翻譯成二進制形式,也就是生成可執(zhí)行文件,用戶拿到的是最終生成的可執(zhí)行文件,看不到源碼。

這個過程叫做編譯(Compile),這樣的編程語言叫做編譯型語言,完成編譯過程的軟件叫做編譯器(Compiler)。

而有的編程語言,如Shell、JavaScript、Python、PHP等,需要一邊執(zhí)行一邊翻譯,不會生成任何可執(zhí)行文件,用戶必須拿到源碼才能運行程序。程序運行后會即時翻譯,翻譯完一部分執(zhí)行一部分,不用等到所有代碼都翻譯完。

這個過程叫做解釋,這樣的編程語言叫做解釋型語言或者腳本語言(Script),完成解釋過程的軟件叫做解釋器。

編譯型語言的優(yōu)點是執(zhí)行速度快、對硬件要求低、保密性好,適合開發(fā)操作系統(tǒng)、大型應用程序、數(shù)據(jù)庫等。


腳本語言的優(yōu)點是使用靈活、部署容易、跨平臺性好,非常適合Web開發(fā)以及小工具的制作。

Shell就是一種腳本語言,我們編寫完源碼后不用編譯,直接運行源碼即可。


西安盛圖科技
高端IT培訓第一品牌



上一篇:什么是平衡二叉樹(上)
下一篇:純干貨!GPIO八大工作模式介紹

歡迎登錄盛圖科技

歡迎注冊盛圖科技

已有賬號,立即登錄