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

前言

在學習shell的時候對shell的概念,理解的還是有點不清晰,所以在網上有關shell的內容,百科的內容是真的不說人話。直至我找到了這篇文章,寫的是通俗易懂,把各方面都涉及到了,把抽象的概念具體化,非常適合初學者進行閱讀。

1. 開始瞭解shell

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

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

  • 猛擊《帶你逛西雅圖活電腦博物館》可以欣賞更多早期的計算機。對於圖形界面,用戶點擊某個圖標就能啓動某個程序;對於命令行,用戶輸入某個程序的名字(可以看做一個命令)就能啓動某個程序。這兩者的基本過程都是類似的,都需要查找程序在硬盤上的安裝位置,然後將它們加載到內存運行。關於程序的運行原理,請猛擊《載入內存,讓程序運行起來》。換句話說,圖形界面和命令行要達到的目的是一樣的,都是讓用戶控制計算機。然而,真正能夠控制計算機硬件(CPU、內存、顯示器等)的只有操作系統內核(Kernel),圖形界面和命令行只是架設在用戶和內核之間的一座橋樑。如果你不瞭解操作系統的作用,請轉到《操作系統是什麼》。由於安全、複雜、繁瑣等原因,用戶不能直接接觸內核(也沒有必要),需要另外再開發一個程序,讓用戶直接使用這個程序;該程序的作用就是接收用戶的操作(點擊圖標、輸入命令),並進行簡單的處理,然後再傳遞給內核,這樣用戶就能間接地使用操作系統內核了。你看,在用戶和內核之間增加一層“代理”,既能簡化用戶的操作,又能保障內核的安全,何樂不爲呢?用戶界面和命令行就是這個另外開發的程序,就是這層“代理”。在Linux下,這個命令行程序叫做Shell。Shell 是一個應用程序,它連接了用戶和 Linux 內核,讓用戶能夠更加高效、安全、低成本地使用 Linux 內核,這就是 Shell 的本質。Shell 本身並不是內核的一部分,它只是站在內核的基礎上編寫的一個應用程序,它和 QQ、迅雷、Firefox 等其它軟件沒有什麼區別。然而 Shell 也有着它的特殊性,就是開機立馬啓動,並呈現在用戶面前;用戶通過 Shell 來使用 Linux,不啓動 Shell 的話,用戶就沒辦法使用 Linux。Shell 是如何連接用戶和內核的?Shell 能夠接收用戶輸入的命令,並對命令進行處理,處理完畢後再將結果反饋給用戶,比如輸出到顯示器、寫入到文件等,這就是大部分讀者對 Shell 的認知。你看,我一直都在使用 Shell,哪有使用內核哦?我也沒有看到 Shell 將我和內核連接起來呀?!其實,Shell 程序本身的功能是很弱的,比如文件操作、輸入輸出、進程管理等都得依賴內核。我們運行一個命令,大部分情況下 Shell 都會去調用內核暴露出來的接口,這就是在使用內核,只是這個過程被 Shell 隱藏了起來,它自己在背後默默進行,我們看不到而已。接口其實就是一個一個的函數,使用內核就是調用這些函數。這就是使用內核的全部內容了嗎?嗯,是的!除了函數,你沒有別的途徑使用內核。比如,我們都知道在 Shell 中輸入cat log.txt命令就可以查看 log.txt 文件中的內容,然而,log.txt 放在磁盤的哪個位置?分成了幾個數據塊?在哪裏開始?在哪裏終止?如何操作探頭讀取它?這些底層細節 Shell 統統不知道的,它只能去調用內核提供的 open() 和 read() 函數,告訴內核我要讀取 log.txt 文件,請幫助我,然後內核就乖乖地按照 Shell 的吩咐去讀取文件了,並將讀取到的文件內容交給 Shell,最後再由 Shell 呈現給用戶(其實呈現到顯示器上還得依賴內核)。整個過程中 Shell 就是一個“中間商”,它在用戶和內核之間“倒賣”數據,只是用戶不知道罷了。Shell 還能連接其它程序 在 Shell 中輸入的命令,有一部分是 Shell 本身自帶的,這叫做內置命令;有一部分是其它的應用程序(一個程序就是一個命令),這叫做外部命令。Shell 本身支持的命令並不多,功能也有限,但是 Shell 可以調用其他的程序,每個程序就是一個命令,這使得 Shell 命令的數量可以無限擴展,其結果就是 Shell 的功能非常強大,完全能夠勝任 Linux 的日常管理工作,如文本或字符串檢索、文件的查找或創建、大規模軟件的自動部署、更改系統設置、監控服務器性能、發送報警郵件、抓取網頁內容、壓縮文件等。更加驚訝的是,Shell 還可以讓多個外部程序發生連接,在它們之間很方便地傳遞數據,也就是把一個程序的輸出結果傳遞給另一個程序作爲輸入。大家所說的 Shell 強大,並不是 Shell 本身功能豐富,而是它擅長使用和組織其他的程序。Shell 就是一個領導者,這正是 Shell 的魅力所在。可以將 Shell 在整個 Linux 系統中的地位描述成下圖所示的樣子。注意“用戶”和“其它應用程序”是通過虛線連接的,因爲用戶啓動 Linux 後直接面對的是 Shell,通過 Shell 才能運行其它的應用程序。
    在這裏插入圖片描述

  • Shell 也支持編程Shell 並不是簡單的堆砌命令,我們還可以在 Shell 中編程,這和使用C++、C#、Java、Python等常見的編程語言並沒有什麼兩樣。Shell 雖然沒有 C++、Java、Python 等強大,但也支持了基本的編程元素,例如:if…else 選擇結構,case…in 開關語句,for、while、until 循環;變量、數組、字符串、註釋、加減乘除、邏輯運算等概念;函數,包括用戶自定義的函數和內置函數(例如 printf、export、eval 等)。站在這個角度講,Shell 也是一種編程語言,它的編譯器(解釋器)是 Shell 這個程序。我們平時所說的 Shell,有時候是指連接用戶和內核的這個程序,有時候又是指 Shell 編程。Shell 主要用來開發一些實用的、自動化的小工具,而不是用來開發具有複雜業務邏輯的中大型軟件,例如檢測計算機的硬件參數、搭建 Web 運行環境、日誌分析等,Shell 都非常合適。使用 Shell 的熟練程度反映了用戶對 Linux 的掌握程度,運維工程師、網絡管理員、程序員都應該學習 Shell。尤其是 Linux 運維工程師,Shell 更是必不可少的,是必須掌握的技能,它使得我們能夠自動化地管理服務器集羣,否則你就得一個一個地登錄所有的服務器,對每一臺服務器都進行相同的設置,而這些服務器可能有成百上千之多,會浪費大量的時間在重複性的工作上。Shell 是一種腳本語言 任何代碼最終都要被“翻譯”成二進制的形式才能在計算機中執行。有的編程語言,如 C/C++、Pascal、Go語言、彙編等,必須在程序運行之前將所有代碼都翻譯成二進制形式,也就是生成可執行文件,用戶拿到的是最終生成的可執行文件,看不到源碼。這個過程叫做編譯(Compile),這樣的編程語言叫做編譯型語言,完成編譯過程的軟件叫做編譯器(Compiler)。而有的編程語言,如 Shell、JavaScript、Python、PHP等,需要一邊執行一邊翻譯,不會生成任何可執行文件,用戶必須拿到源碼才能運行程序。程序運行後會即時翻譯,翻譯完一部分執行一部分,不用等到所有代碼都翻譯完。這個過程叫做解釋,這樣的編程語言叫做解釋型語言或者腳本語言(Script),完成解釋過程的軟件叫做解釋器。編譯型語言的優點是執行速度快、對硬件要求低、保密性好,適合開發操作系統、大型應用程序、數據庫等。腳本語言的優點是使用靈活、部署容易、跨平臺性好,非常適合 Web 開發以及小工具的製作。

來源自: https://www.360kuai.com/pc/96255b8f73d5e4c34?cota=4&kuai_so=1&tj_url=so_rec&sign=360_57c3bbd1&refer_scene=so_1
這個比官方的好理解多了

3.再來點官方的概念

【一】 shell的含義:

首先shell的英文含義是“殼”;

它是相對於內核來說的,因爲它是建立在內核的基礎上,面向於用戶的一種表現形式,比如我們看到一個球,見到的是它的殼,而非核。

Linux中的shell,是指一個面向用戶的命令接口,表現形式就是一個可以由用戶錄入的界面,這個界面也可以反饋運行信息;

【二】shell在Linux中的存在形式:

由於Linux不同於Windows,Linux是內核與界面分離的,它可以脫離圖形界面而單獨運行,同樣也可以在內核的基礎上運行圖形化的桌面。

這樣,在Linux系統中,就出現了兩種shell表現形式,一種是在無圖形界面下的終端運行環境下的shell,另一種是桌面上運行的類似Windows 的MS-DOS運行窗口,前者我們一般習慣性地簡稱爲終端,後者一般直接稱爲shell

【三】shell如何執行用戶的指令

shell有兩種執行指令的方式,第一種方法是用戶事先編寫一個sh腳本文件,內含shell腳本,而後使用shell程序執行該腳本,這種方式,我們習慣稱爲shell編程。

   第二種形式,則是用戶直接在shell界面上執行shell命令,由於shell界面的關係,大家都習慣一行行的書寫,很少寫出成套的程序來一起執行,所以也稱命令行。

總結:shell可以說只是爲用戶與機器之間搭建成的一個橋樑,讓我們能夠通過shell來對計算機進行操作和交互,從而達到讓計算機爲我們服務的目的。

以上。

來源自: https://www.cnblogs.com/tjudzj/p/7088543.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章