久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Shell是什么,?1分鐘理解Shell的概念,!

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

然而在計算機的早期并沒有圖形界面,我們只能通過一個一個地命令來控制計算機,,這些命令有成百上千之多,,且不說記住這些命令非常困難,每天面對沒有任何色彩的“黑屏”本身就是一件枯燥的事情,;這個時候的計算機還遠遠談不上炫酷和普及,,只有專業(yè)人員才能使用。
早期的計算機
圖:早期的電腦,,都是“黑紙白字”
猛擊《帶你逛西雅圖活電腦博物館》可以欣賞更多早期的計算機,。
對于圖形界面,用戶點擊某個圖標就能啟動某個程序,;對于命令行,,用戶輸入某個程序的名字(可以看做一個命令)就能啟動某個程序。這兩者的基本過程都是類似的,,都需要查找程序在硬盤上的安裝位置,,然后將它們加載到內(nèi)存運行。
關(guān)于程序的運行原理,,請猛擊《載入內(nèi)存,,讓程序運行起來》。
換句話說,,圖形界面和命令行要達到的目的是一樣的,,都是讓用戶控制計算機。

然而,,真正能夠控制計算機硬件(CPU,、內(nèi)存、顯示器等)的只有操作系統(tǒng)內(nèi)核(Kernel),,圖形界面和命令行只是架設(shè)在用戶和內(nèi)核之間的一座橋梁,。
如果你不了解操作系統(tǒng)的作用,請轉(zhuǎn)到《操作系統(tǒng)是什么》,。
由于安全,、復(fù)雜、繁瑣等原因,,用戶不能直接接觸內(nèi)核(也沒有必要),,需要另外再開發(fā)一個程序,讓用戶直接使用這個程序;該程序的作用就是接收用戶的操作(點擊圖標,、輸入命令),,并進行簡單的處理,然后再傳遞給內(nèi)核,,這樣用戶就能間接地使用操作系統(tǒng)內(nèi)核了,。你看,在用戶和內(nèi)核之間增加一層“代理”,,既能簡化用戶的操作,,又能保障內(nèi)核的安全,何樂不為呢,?

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

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

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

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

Shell 能夠接收用戶輸入的命令,并對命令進行處理,,處理完畢后再將結(jié)果反饋給用戶,比如輸出到顯示器,、寫入到文件等,,這就是大部分讀者對 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 中輸入cat log.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)置命令;有一部分是其它的應(yīng)用程序(一個程序就是一個命令),,這叫做外部命令,。

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

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

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

可以將 Shell 在整個 Linux 系統(tǒng)中的地位描述成下圖所示的樣子。注意“用戶”和“其它應(yīng)用程序”是通過虛線連接的,,因為用戶啟動 Linux 后直接面對的是 Shell,,通過 Shell 才能運行其它的應(yīng)用程序。

Shell在整個Linux系統(tǒng)中的地位示意圖

Shell 也支持編程

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

Shell 雖然沒有 C++,、Java,、Python 等強大,但也支持了基本的編程元素,,例如:
  • if...else 選擇結(jié)構(gòu),,case...in 開關(guān)語句,for,、while,、until 循環(huán);
  • 變量,、數(shù)組,、字符串、注釋,、加減乘除,、邏輯運算等概念;
  • 函數(shù),,包括用戶自定義的函數(shù)和內(nèi)置函數(shù)(例如 printf,、export、eval 等),。

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

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

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

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

Shell 是一種腳本語言

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

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

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

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

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

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

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

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多