Shell到底是什么?
摘錄自博客鏈接地址:http://c.biancheng.net/view/706.html
1. Shell是什么?
答:shell本意是指殼,在計算機術語中,shell是指用戶操作接口的意思。操作系統運行起來后都會給用戶提供一個操作接口,這個操作接口就叫shell。
用戶可以通過shell來調用操作系統內部的復雜實現。
Shell 是一個應用程序,它連接了用戶和 Linux 內核,讓用戶能夠更加高效、安全、低成本地使用 Linux 內核,這就是 Shell 的本質。
Shell 本身并不是內核的一部分,它只是在內核的基礎上編寫的一個應用程序,它和 QQ、迅雷、Firefox 等其它軟件沒有什么區別。
然而 Shell 也有著它的特殊性,就是開機立馬啟動,并呈現在用戶面前;用戶通過 Shell 來使用 Linux,不啟動 Shell 的話,用戶就沒辦法使用 Linux。
2. Shell的分類?
答:常用的Shell功能有兩種形式外在形式:GUI和cmdline
?? ?(1)GUI(圖形用戶界面),特點是操作簡單、易學易用,適合使用電腦來工作的人。
?? ?(2)cmdline(命令行界面),譬如linux的終端和windows的cmd,特點是不易用易學,優點是可以進行方便的shell編程,適合做開發的人。
?? ?用戶界面和命令行就是這個另外開發的程序,就是“代理”作用。在Linux下,這個特定程序叫做 Shell。
3. 為什么需要Shell?
答:1. 因為計算機程序本身很復雜,操作系統內部功能的實現和外面接口的調用必須分開。
? ? ? ?操作接口本身就是對內部復雜功能實現的一種封裝,外部只需要通過操作接口就可以很容易去調用操作系統內部功能,但是卻不用理會內部功能實現的復雜性和原理。
? ? ? ?2. 由于安全、復雜、繁瑣等原因,用戶不能直接接觸內核(也沒有必要),需要另外再開發一個程序,讓用戶直接使用這個程序;
? ? ? ?該程序的作用就是接收用戶的操作(點擊圖標、輸入命令),并進行簡單的處理,然后再傳遞給內核,這樣用戶就能間接地使用操作系統內核了。
4. 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 就是一個“中間商”,它在用戶和內核之間“倒賣”數據,只是用戶不知道罷了。
5. 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 更是必不可少的,是必須掌握的技能,它使得我們能夠自動化地管理服務器集群,否則你就得一個一個地登錄所有的服務器。
6. Shell 是一種腳本語言
任何代碼最終都要被“翻譯”成二進制的形式才能在計算機中執行。
編譯型語言:有的編程語言,如 C/C++、Pascal、Go語言、匯編等,必須在程序運行之前將所有代碼都翻譯成二進制形式,也就是生成可執行文件,用戶拿到的是最終生成的可執行文件,看不到源碼。這個過程叫做編譯(Compile),這樣的編程語言叫做編譯型語言,完成編譯過程的軟件叫做編譯器(Compiler)。
腳本語言:有的編程語言,如 Shell、JavaScript、Python、PHP等,需要一邊執行一邊翻譯,不會生成任何可執行文件,用戶必須拿到源碼才能運行程序。程序運行后會即時翻譯,翻譯完一部分執行一部分,不用等到所有代碼都翻譯完。這個過程叫做解釋,這樣的編程語言叫做解釋型語言或者腳本語言(Script),完成解釋過程的軟件叫做解釋器。
編譯型語言的優點是執行速度快、對硬件要求低、保密性好,適合開發操作系統、大型應用程序、數據庫等。
腳本語言的優點是使用靈活、部署容易、跨平臺性好,非常適合 Web 開發以及小工具的制作。
Shell就是一種腳本語言,我們編寫完源碼后不用編譯,直接運行源碼即可。
總結
以上是生活随笔為你收集整理的Shell到底是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 避免一个用户多次登录修改版
- 下一篇: Winform开发之ADO.NET对象C